openapi: 3.1.0
info:
  title: ZEP REST API
  version: 1.0.0
  description: Die kundenseitige ZEP REST API.
  contact:
    email: support@zep.de
servers:
  - url: https://www.zep-online.de/{zepinstanz}/next/api/v1
    variables:
      zepinstanz:
        description: The ZEP instance name
        default: zepinstanz
paths:
  /planning:
    get:
      operationId: planning.index.legacy
      description: Abgekündigter Alias von GET /plannings. Leitet permanent auf den
        aktuellen Endpunkt weiter.
      summary: Planungseinträge auflisten (abgekündigter Alias)
      deprecated: true
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: string
        "401":
          $ref: "#/components/responses/AuthenticationException"
      x-sunset: 2027-08-31
      tags: []
  /absence-reasons:
    get:
      operationId: absence-reasons.index
      description: |-
        Liefert alle buchbaren Fehlgründe, z. B. Urlaub oder Krankheit, zusammen
        mit den Regeln, die festlegen, wie sie gebucht werden dürfen.
      summary: Konfigurierte Fehlgründe auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: external_id
          in: query
          description: Beschränkt die Liste auf den Fehlgrund, der in einem angebundenen
            externen System auf diese Kennung abgebildet ist.
          schema:
            type:
              - string
              - "null"
            maxLength: 100
      responses:
        "200":
          description: Paginated set of `AbsenceReasonResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/AbsenceReason"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /absence-reasons/{name}:
    get:
      operationId: absence-reasons.show
      description: Sucht den Fehlgrund anhand seines eindeutigen Namens und liefert
        seine vollständige Konfiguration.
      summary: Einzelnen Fehlgrund abrufen
      tags:
        - Masterdata
      parameters:
        - name: name
          in: path
          required: true
          description: Der Name des Fehlgrunds
          schema:
            type: string
      responses:
        "200":
          description: "`AbsenceReasonResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/AbsenceReason"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /absences:
    get:
      operationId: absences.index
      description: >-
        Liefert eine paginierte Liste der Fehlzeiten (Urlaub, Krankheit und die
        übrigen

        Fehlzeitarten), filterbar nach Mitarbeiter und Datumsbereich.
      summary: Fehlzeiten auflisten
      tags:
        - Absences
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
        - name: employee_id
          in: query
          schema:
            type:
              - string
              - "null"
      responses:
        "200":
          description: Paginated set of `AbsenceResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Absence"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: absences.store
      description: Erfasst eine neue Fehlzeit für einen Mitarbeiter.
      summary: Fehlzeit anlegen
      tags:
        - Absences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreAbsenceApiRequest"
      responses:
        "201":
          description: |-
            `AbsenceResource`

            `JsonResource`
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      data:
                        allOf:
                          - $ref: "#/components/schemas/Absence"
                          - type: object
                            required:
                              - absenceReason
                              - leaveApprovalApplication
                    required:
                      - data
                  - type: object
                    properties:
                      data:
                        $ref: "#/components/schemas/Json"
                    required:
                      - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /absences/{id}:
    get:
      operationId: absences.show
      description: >-
        Liefert eine Fehlzeit anhand ihrer ID, einschließlich ihres Fehlgrunds
        und, sofern sie

        einen Genehmigungsworkflow durchlaufen hat, des Urlaubsantrags.
      summary: Einzelne Fehlzeit abrufen
      tags:
        - Absences
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Fehlzeit
          schema:
            type: integer
      responses:
        "200":
          description: "`AbsenceResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Absence"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /activities:
    get:
      operationId: activities.index
      description: Liefert eine paginierte Liste der in diesem Mandanten definierten
        Tätigkeiten.
      summary: Tätigkeiten auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
      responses:
        "200":
          description: Paginated set of `ActivityResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Activity"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /activities/{activity}:
    get:
      operationId: activities.show
      description: Liefert eine einzelne Tätigkeit.
      summary: Tätigkeit abrufen
      tags:
        - Masterdata
      parameters:
        - name: activity
          in: path
          required: true
          description: Der Name der Tätigkeit
          schema:
            type: string
      responses:
        "200":
          description: "`ActivityResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Activity"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /articles:
    get:
      operationId: articles.index
      description: Enthält auch inaktive Artikel, sofern der Filter sie nicht ausschließt.
      summary: Artikel aus dem Artikelkatalog auflisten, optional gefiltert und
        paginiert
      tags:
        - Articles
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
      responses:
        "200":
          description: Paginated set of `ArticleResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Article"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /articles/{id}:
    get:
      operationId: articles.show
      description: Liefert die Katalogdaten des Artikels, einschließlich seiner
        sprachabhängigen Beschreibungstexte.
      summary: Einzelnen Artikel anhand seiner ID abrufen
      tags:
        - Articles
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Artikels
          schema:
            type: integer
      responses:
        "200":
          description: "`ArticleResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Article"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /attendances:
    get:
      operationId: attendances.index
      description: >-
        Liefert eine paginierte Liste der Projektzeiten, filterbar nach
        Mitarbeiter, Datumsbereich

        und den übrigen Feldern der Buchung.
      summary: Projektzeiten auflisten
      tags:
        - Attendances
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
        - name: employee_id
          in: query
          schema:
            type:
              - string
              - "null"
        - name: project_id
          in: query
          schema:
            type:
              - string
              - "null"
        - name: ticket_id
          in: query
          schema:
            type:
              - string
              - "null"
        - name: department_id
          in: query
          schema:
            type:
              - string
              - "null"
        - name: id_after
          in: query
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: project_release
          in: query
          schema:
            anyOf:
              - $ref: "#/components/schemas/ProjectRelease"
              - type: "null"
      responses:
        "200":
          description: Paginated set of `AttendancesResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Attendances"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: attendances.store
      description: >-
        Erfasst eine neue Projektzeit für einen Mitarbeiter und führt dieselben
        Plausibilitätsprüfungen

        (z. B. überlappende Buchungen, Konflikte mit Fehlzeiten) durch wie beim
        Buchen über die Oberfläche.
      summary: Projektzeit anlegen
      tags:
        - Attendances
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreAttendanceApiRequest"
      responses:
        "201":
          description: "`AttendancesResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Attendances"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /attendances/{id}:
    get:
      operationId: attendances.show
      description: Liefert eine Projektzeit anhand ihrer ID.
      summary: Einzelne Projektzeit abrufen
      tags:
        - Attendances
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Projektzeit
          schema:
            type: integer
      responses:
        "200":
          description: "`AttendancesResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Attendances"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.attendancesApi.update_1
      description: >-
        Aktualisiert die Felder der angegebenen Buchung. Nur die übermittelten
        Felder werden geändert, alle

        anderen behalten ihren aktuellen Wert; die Plausibilitätsprüfungen
        werden auf das zusammengeführte Ergebnis erneut angewendet.
      summary: Projektzeit aktualisieren
      tags:
        - Attendances
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Projektzeit
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateAttendanceApiRequest"
      responses:
        "200":
          description: "`AttendancesResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Attendances"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.attendancesApi.update_2
      description: >-
        Aktualisiert die Felder der angegebenen Buchung. Nur die übermittelten
        Felder werden geändert, alle

        anderen behalten ihren aktuellen Wert; die Plausibilitätsprüfungen
        werden auf das zusammengeführte Ergebnis erneut angewendet.
      summary: Projektzeit aktualisieren
      tags:
        - Attendances
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Projektzeit
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateAttendanceApiRequest"
      responses:
        "200":
          description: "`AttendancesResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Attendances"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    delete:
      operationId: attendances.destroy
      description: >-
        Entfernt die Buchung endgültig. Wird abgelehnt, wenn das Datum der
        Buchung vor dem

        Freigabedatum des Mitarbeiters oder außerhalb des zulässigen
        Erfassungszeitraums liegt oder der Monat abgeschlossen ist.
      summary: Projektzeit löschen
      tags:
        - Attendances
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Projektzeit
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    const: Attendance deleted successfully.
                required:
                  - message
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    const: Attendance could not be deleted.
                required:
                  - message
  /categories:
    get:
      operationId: categories.index
      description: >-
        Liefert die Kategorien, die Mitarbeitern, Projekten, Kunden, Dokumenten
        oder

        den übrigen durch ihren `type` benannten Entitätsarten zugeordnet werden
        können.
      summary: Verfügbare Kategorien zur Kennzeichnung von Datensätzen auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: type
          in: query
          description: Beschränkt die Liste auf Kategorien dieses Typs, z. B. Mitarbeiter,
            Projekt oder Kunde.
          schema:
            type:
              - string
              - "null"
            enum:
              - mitarbeiter
              - projekt
              - kunde
              - dokument
              - angebot
              - ansprechpartner
              - ticket
              - ticket2
              - ticket3
              - null
      responses:
        "200":
          description: Paginated set of `CategoryResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Category"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /categories/{name}:
    get:
      operationId: categories.show
      description: Sucht die Kategorie anhand ihres eindeutigen Namens und liefert
        ihre Konfiguration.
      summary: Einzelne Kategorie abrufen
      tags:
        - Masterdata
      parameters:
        - name: name
          in: path
          required: true
          description: Der Name der Kategorie
          schema:
            type: string
      responses:
        "200":
          description: "`CategoryResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Category"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /customers/{customer_number}/contacts:
    get:
      operationId: customers.contacts.index
      description: Liefert eine paginierte Liste der Ansprechpartner des angegebenen Kunden.
      summary: Ansprechpartner eines Kunden auflisten
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `CustomerContactResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/CustomerContact"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    post:
      operationId: customers.contacts.store
      description: Legt einen Ansprechpartner für den angegebenen Kunden an und
        liefert ihn mit geladenen Kategorien zurück.
      summary: Ansprechpartner anlegen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreContactApiRequest"
      responses:
        "201":
          description: "`CustomerContactResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/CustomerContact"
                      - type: object
                        required:
                          - categories
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /customers/{customer_number}/contacts/{id}:
    get:
      operationId: customers.contacts.show
      description: Liefert einen einzelnen Ansprechpartner des angegebenen Kunden,
        einschließlich seiner Kategorien.
      summary: Ansprechpartner abrufen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Ansprechpartners
          schema:
            type: integer
      responses:
        "200":
          description: "`CustomerContactResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/CustomerContact"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.customers.customerContactsApi.update_1
      description: Aktualisiert einen Ansprechpartner des angegebenen Kunden und
        liefert ihn mit geladenen Kategorien zurück.
      summary: Ansprechpartner aktualisieren
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Ansprechpartners
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateContactApiRequest"
      responses:
        "200":
          description: "`CustomerContactResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/CustomerContact"
                      - type: object
                        required:
                          - categories
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.customers.customerContactsApi.update_2
      description: Aktualisiert einen Ansprechpartner des angegebenen Kunden und
        liefert ihn mit geladenen Kategorien zurück.
      summary: Ansprechpartner aktualisieren
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Ansprechpartners
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateContactApiRequest"
      responses:
        "200":
          description: "`CustomerContactResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/CustomerContact"
                      - type: object
                        required:
                          - categories
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    delete:
      operationId: customers.contacts.destroy
      description: Löscht den Ansprechpartner des angegebenen Kunden.
      summary: Ansprechpartner löschen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Ansprechpartners
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    const: Contact deleted successfully.
                required:
                  - message
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /customers/{customer_number}/price-tables:
    get:
      operationId: customers.price-tables.index
      description: Liefert eine paginierte Liste der dem angegebenen Kunden
        zugeordneten Preistabellen.
      summary: Preistabellen eines Kunden auflisten
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `PriceTableResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PriceTable"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /customers/{customer_number}/price-tables/{id}:
    get:
      operationId: customers.price-tables.show
      description: Liefert eine einzelne dem angegebenen Kunden zugeordnete
        Preistabelle, einschließlich ihrer Preise und Faktoren.
      summary: Preistabelle eines Kunden abrufen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID der Preistabelle
          schema:
            type: integer
      responses:
        "200":
          description: "`PriceTableResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/PriceTable"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /customers:
    get:
      operationId: customers.index
      description: >-
        Liefert eine paginierte Liste der Kunden. Verwenden Sie `inactive`, um
        das Ergebnis auf aktive oder

        inaktive Kunden einzuschränken — beachten Sie, dass ein nicht
        unterstützter Filter ignoriert statt abgelehnt wird, sodass ein

        falsch geschriebener Parameter stillschweigend alle Kunden liefert.
      summary: Kunden auflisten
      tags:
        - Customers
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
        - name: customer_number[]
          in: query
          schema:
            type:
              - array
              - "null"
            items:
              type: string
        - name: inactive
          in: query
          description: >-
            Beschränkt das Ergebnis nach Aktivitätsstatus: true liefert nur
            inaktive Kunden, false nur

            aktive. Ersetzt ab 7.12.49 den Filter `status`, der als
            abgekündigter Alias mit

            umgekehrter Polarität weiterhin verfügbar bleibt.
          schema:
            type:
              - boolean
              - "null"
        - name: status
          in: query
          description: "Abgekündigter Alias für die Umkehrung von `inactive`: `1` bedeutet
            aktiv, `0` inaktiv. Ein explizit angegebenes `inactive` hat Vorrang;
            ein nicht auswertbarer Wert wird ignoriert statt interpretiert."
          deprecated: true
          schema:
            type:
              - integer
              - "null"
      responses:
        "200":
          description: Paginated set of `CustomerResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Customer"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: customers.store
      description: >-
        Legt einen Kunden an und liefert ihn mit geladenen Adressen,
        Verantwortlichen, Kategorien und dynamischen

        Attributen zurück.
      summary: Kunde anlegen
      tags:
        - Customers
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: "#/components/schemas/StoreCustomerApiRequest"
                - type: object
                  properties:
                    status:
                      type:
                        - integer
                        - "null"
                      description: "Deprecated alias for the inverse of `inactive`: `1` means active,
                        `0` inactive. An explicit `inactive` wins, and an
                        unparseable value is ignored rather than guessed."
      responses:
        "201":
          description: "`CustomerResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Customer"
                      - type: object
                        required:
                          - addresses
                          - managers
                          - categories
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /customers/{customer_number}:
    get:
      operationId: customers.show
      description: >-
        Liefert einen einzelnen Kunden, einschließlich seiner Adressen,
        Verantwortlichen, Kategorien und dynamischen

        Attribute.
      summary: Kunde abrufen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
      responses:
        "200":
          description: "`CustomerResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Customer"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.customersApi.update_1
      description: >-
        Aktualisiert einen Kunden und liefert ihn mit geladenen Adressen,
        Verantwortlichen, Kategorien und dynamischen

        Attributen zurück. Hat die Aktualisierung einen Hinweis zur
        Datenkonsistenz ausgelöst, wird dieser in einem

        zusätzlichen Feld `info` zurückgegeben.
      summary: Kunde aktualisieren
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: "#/components/schemas/UpdateCustomerApiRequest"
                - type: object
                  properties:
                    status:
                      type:
                        - integer
                        - "null"
                      description: "Deprecated alias for the inverse of `inactive`: `1` means active,
                        `0` inactive. An explicit `inactive` wins, and an
                        unparseable value is ignored rather than guessed."
      responses:
        "200":
          description: "`CustomerResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Customer"
                      - type: object
                        required:
                          - addresses
                          - managers
                          - categories
                          - dynamicAttributes
                  info:
                    type:
                      - string
                      - "null"
                    description: >-
                      Present only when the update adjusted customer data for
                      consistency; says what

                      was changed beyond what was sent.
                required:
                  - data
                  - info
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.customersApi.update_2
      description: >-
        Aktualisiert einen Kunden und liefert ihn mit geladenen Adressen,
        Verantwortlichen, Kategorien und dynamischen

        Attributen zurück. Hat die Aktualisierung einen Hinweis zur
        Datenkonsistenz ausgelöst, wird dieser in einem

        zusätzlichen Feld `info` zurückgegeben.
      summary: Kunde aktualisieren
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: "#/components/schemas/UpdateCustomerApiRequest"
                - type: object
                  properties:
                    status:
                      type:
                        - integer
                        - "null"
                      description: "Deprecated alias for the inverse of `inactive`: `1` means active,
                        `0` inactive. An explicit `inactive` wins, and an
                        unparseable value is ignored rather than guessed."
      responses:
        "200":
          description: "`CustomerResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Customer"
                      - type: object
                        required:
                          - addresses
                          - managers
                          - categories
                          - dynamicAttributes
                  info:
                    type:
                      - string
                      - "null"
                    description: >-
                      Present only when the update adjusted customer data for
                      consistency; says what

                      was changed beyond what was sent.
                required:
                  - data
                  - info
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    delete:
      operationId: customers.destroy
      description: Löscht den Kunden und alle zu ihm gehörenden Daten.
      summary: Kunde löschen
      tags:
        - Customers
      parameters:
        - name: customer_number
          in: path
          required: true
          description: Die Kundennummer des Kunden
          schema:
            type: string
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The outcome of the deletion, in the tenant's language.
                    const: Customer deleted successfully.
                required:
                  - message
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Why the deletion could not be carried out, in the tenant's
                      language.
                    const: Customer could not be deleted.
                required:
                  - message
  /departments/{id}/employees:
    get:
      operationId: departments.employees.index
      description: Liefert die paginierte Liste der Mitarbeiter, die der angegebenen
        Abteilung aktuell zugeordnet sind.
      summary: Mitarbeiter einer Abteilung auflisten
      tags:
        - Departments
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Abteilung
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `EmployeeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Employee"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /departments:
    get:
      operationId: departments.index
      description: >-
        Liefert eine paginierte Liste der Abteilungen, einschließlich der Anzahl
        ihrer Unterabteilungen und

        der Angabe, ob ein Abteilungsleiter zugeordnet ist.
      summary: Abteilungen auflisten
      tags:
        - Departments
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
      responses:
        "200":
          description: Paginated set of `DepartmentResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Department"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /departments/{id}:
    get:
      operationId: departments.show
      description: >-
        Liefert eine Abteilung anhand ihrer ID, einschließlich ihres
        Abteilungsleiters und der Anzahl

        ihrer Unterabteilungen.
      summary: Einzelne Abteilung abrufen
      tags:
        - Departments
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Abteilung
          schema:
            type: integer
      responses:
        "200":
          description: "`DepartmentResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Department"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /departments/{id}/children:
    get:
      operationId: departments.children
      description: Liefert die direkten Unterabteilungen der angegebenen Abteilung,
        eine Ebene tief.
      summary: Unterabteilungen einer Abteilung auflisten
      tags:
        - Departments
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Abteilung
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `DepartmentResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Department"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /devices:
    get:
      operationId: devices.index
      description: >-
        Liefert eine paginierte Liste der registrierten
        Terminals/Erfassungsgeräte, einschließlich der Anzahl

        zugeordneter Mitarbeiter und Kategorien.
      summary: Erfassungsgeräte auflisten
      tags:
        - Devices
      responses:
        "200":
          description: Paginated set of `DeviceResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Device"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
      parameters:
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
  /devices/{id}:
    get:
      operationId: devices.show
      description: >-
        Liefert ein Erfassungsgerät anhand seiner ID, einschließlich der ihm
        zugeordneten Mitarbeiter und

        Kategorien.
      summary: Einzelnes Erfassungsgerät abrufen
      tags:
        - Devices
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Erfassungsgeräts
          schema:
            type: integer
      responses:
        "200":
          description: "`DeviceResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Device"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /folders/{id}/documents:
    get:
      operationId: folders.documents.index
      description: Liefert die im angegebenen Ordner abgelegten Dokumente, jeweils
        einschließlich des Dateiinhalts.
      summary: In einem Ordner abgelegte Dokumente auflisten
      tags:
        - Documents
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Ordners
          schema:
            type: integer
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
      responses:
        "200":
          description: Paginated set of `DocumentResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Document"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /folders/{id}/documents/{document_id}:
    get:
      operationId: folders.documents.show
      description: >-
        Sucht das Dokument anhand seiner ID im angegebenen Ordner und liefert
        Dateinamen, Dateityp

        und base64-codierten Inhalt.
      summary: Einzelnes Dokument abrufen, einschließlich des Dateiinhalts
      tags:
        - Documents
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Ordners
          schema:
            type: integer
        - name: document_id
          in: path
          required: true
          description: Die ID des Dokuments
          schema:
            type: integer
      responses:
        "200":
          description: "`DocumentResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Document"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /folders:
    get:
      operationId: folders.index
      description: >-
        Liefert die Ordner, in denen Dokumente organisiert sind, optional
        eingeschränkt auf diejenigen, die zu

        einem bestimmten Projekt, Kunden, Mitarbeiter, einer Rechnung oder einem
        Angebot gehören.
      summary: Dokumentordner auflisten
      tags:
        - Documents
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: name
          in: query
          description: Beschränkt die Liste auf Ordner, deren Name diesen Text enthält.
          schema:
            type:
              - string
              - "null"
        - name: type_id
          in: query
          description: Beschränkt die Liste auf Ordner dieser Ordnertyp-ID, z. B. Projekt-
            oder Kundenordner.
          schema:
            type:
              - integer
              - "null"
        - name: project_id
          in: query
          description: Beschränkt die Liste auf Ordner, die zu diesem Projekt gehören.
          schema:
            type:
              - integer
              - "null"
        - name: employee_username
          in: query
          description: Beschränkt die Liste auf Ordner, die zu diesem Mitarbeiter gehören.
          schema:
            type:
              - string
              - "null"
        - name: invoice_number
          in: query
          description: Beschränkt die Liste auf Ordner, die zu dieser Rechnung gehören.
          schema:
            type:
              - string
              - "null"
        - name: customer_number
          in: query
          description: Beschränkt die Liste auf Ordner, die zu diesem Kunden gehören.
          schema:
            type:
              - string
              - "null"
        - name: offer_id
          in: query
          description: Beschränkt die Liste auf Ordner, die zu diesem Angebot gehören.
          schema:
            type:
              - integer
              - "null"
      responses:
        "200":
          description: Paginated set of `DocumentFolderResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/DocumentFolder"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /folders/{id}:
    get:
      operationId: folders.show
      description: Sucht den Ordner anhand seiner ID und liefert ihn zusammen mit
        seinen Unterordnern.
      summary: Einzelnen Dokumentordner abrufen
      tags:
        - Documents
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Ordners
          schema:
            type: integer
      responses:
        "200":
          description: "`DocumentFolderResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/DocumentFolder"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /dynamic-attributes:
    get:
      operationId: dynamic-attributes.index
      description: >-
        Liefert die benutzerdefinierten Felder, die für Mitarbeiter, Projekte,
        Kunden und die übrigen

        Entitätsarten konfiguriert sind, denen ein dynamisches Attribut
        zugeordnet werden kann.
      summary: Definitionen dynamischer Attribute auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
      responses:
        "200":
          description: Paginated set of `DynamicAttributeDefinitionResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/DynamicAttributeDefinition"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /dynamic-attributes/{id}:
    get:
      operationId: dynamic-attributes.show
      description: >-
        Sucht die Definition anhand ihrer ID und liefert ihre vollständige
        Konfiguration, einschließlich der

        Optionsliste, sofern ihr Typ eine hat.
      summary: Definition eines dynamischen Attributs abrufen
      tags:
        - Masterdata
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des dynamischen Attributs
          schema:
            type: string
      responses:
        "200":
          description: "`DynamicAttributeDefinitionResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/DynamicAttributeDefinition"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/absences:
    get:
      operationId: employees.absences.index
      description: Liefert die paginierte Liste der für den angegebenen Mitarbeiter
        erfassten Fehlzeiten.
      summary: Fehlzeiten eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `AbsenceResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Absence"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/employment-periods:
    get:
      operationId: employees.employment-periods.index
      description: Liefert die paginierte Liste der für den angegebenen Mitarbeiter
        erfassten Beschäftigungszeiträume.
      summary: Beschäftigungszeiträume eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `EmploymentPeriodResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/EmploymentPeriod"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    post:
      operationId: employees.employment-periods.store
      description: Erfasst einen neuen Beschäftigungszeitraum für den angegebenen
        Mitarbeiter.
      summary: Beschäftigungszeitraum anlegen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreEmploymentPeriodApiRequest"
      responses:
        "201":
          description: "`EmploymentPeriodResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/EmploymentPeriod"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees/{username}/employment-periods/{id}:
    get:
      operationId: employees.employment-periods.show
      description: Liefert einen Beschäftigungszeitraum des angegebenen Mitarbeiters
        anhand seiner ID.
      summary: Einzelnen Beschäftigungszeitraum abrufen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Beschäftigungszeitraums
          schema:
            type: integer
      responses:
        "200":
          description: "`EmploymentPeriodResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/EmploymentPeriod"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.employees.employeeEmploymentPeriodsApi.update_1
      description: Aktualisiert den angegebenen Beschäftigungszeitraum des Mitarbeiters.
      summary: Beschäftigungszeitraum aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Beschäftigungszeitraums
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateEmploymentPeriodApiRequest"
      responses:
        "200":
          description: "`EmploymentPeriodResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/EmploymentPeriod"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.employees.employeeEmploymentPeriodsApi.update_2
      description: Aktualisiert den angegebenen Beschäftigungszeitraum des Mitarbeiters.
      summary: Beschäftigungszeitraum aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des Beschäftigungszeitraums
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateEmploymentPeriodApiRequest"
      responses:
        "200":
          description: "`EmploymentPeriodResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/EmploymentPeriod"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees/{username}/internal-rates:
    get:
      operationId: employees.internal-rates.index
      description: Liefert die paginierte Liste der für den angegebenen Mitarbeiter
        erfassten internen Stundensätze (Kostensätze).
      summary: Interne Stundensätze eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `InternalRateResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/InternalRate"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/internal-rates/{id}:
    get:
      operationId: employees.internal-rates.show
      description: Liefert einen internen Stundensatz des angegebenen Mitarbeiters
        anhand seiner ID.
      summary: Einzelnen internen Stundensatz abrufen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID des internen Stundensatzes
          schema:
            type: integer
      responses:
        "200":
          description: "`InternalRateResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/InternalRate"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/meals:
    get:
      operationId: employees.meals.index
      description: >-
        Liefert die paginierte Liste der erfassten Mahlzeiten
        (Frühstück/Mittagessen/Abendessen) für den angegebenen

        Mitarbeiter.
      summary: Mahlzeiten eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `MealResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Meal"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/meals/{id}:
    get:
      operationId: employees.meals.show
      description: Liefert eine erfasste Mahlzeit des angegebenen Mitarbeiters anhand
        ihrer ID.
      summary: Einzelne Mahlzeit abrufen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID der Mahlzeit
          schema:
            type: integer
      responses:
        "200":
          description: "`MealResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Meal"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /employees/{username}/projects:
    get:
      operationId: employees.projects.index
      description: >-
        Liefert die paginierte Liste der Projektzuordnungen des angegebenen
        Mitarbeiters. Unterstützt

        Filterung nach project_status (string|array), project_start (YYYY-MM-DD)
        und

        project_end (YYYY-MM-DD).
      summary: Projekte auflisten, denen ein Mitarbeiter zugeordnet ist
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: project_status
          in: query
          description: >-
            Beschränkt das Ergebnis auf Projekte in einem oder mehreren Status.
            Sowohl ein einzelner Wert

            als auch eine Liste wird akzeptiert.
          schema:
            type:
              - string
              - "null"
        - name: project_start_date
          in: query
          description: Nur Projekte zurückgeben, deren Startdatum dieses Datum oder später
            ist.
          schema:
            type: string
            format: date
        - name: project_end_date
          in: query
          description: >-
            Nur Projekte zurückgeben, deren Enddatum an oder vor diesem Datum
            liegt. Darf nicht

            vor project_start_date liegen.
          schema:
            type: string
            format: date
      responses:
        "200":
          description: Paginated set of `ProjectEmployeeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectEmployee"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees/{username}/regular-working-times:
    get:
      operationId: employees.regular-working-times.index
      description: >-
        Liefert die paginierte Liste der für den angegebenen Mitarbeiter
        erfassten Regelarbeitszeiten,

        einschließlich Feiertagskalender und Pausenregelungstyp.
      summary: Regelarbeitszeiten eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `RegularWorkingTimeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/RegularWorkingTime"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    post:
      operationId: employees.regular-working-times.store
      description: Erfasst eine neue Regelarbeitszeit für den angegebenen Mitarbeiter.
      summary: Regelarbeitszeit anlegen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreRegularWorkingTimeApiRequst"
      responses:
        "201":
          description: "`RegularWorkingTimeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/RegularWorkingTime"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees/{username}/regular-working-times/{id}:
    get:
      operationId: employees.regular-working-times.show
      description: Liefert eine Regelarbeitszeit des angegebenen Mitarbeiters anhand
        ihrer ID.
      summary: Einzelne Regelarbeitszeit abrufen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID der Regelarbeitszeit
          schema:
            type: integer
      responses:
        "200":
          description: "`RegularWorkingTimeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/RegularWorkingTime"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.employees.employeeRegularWorkingTimesApi.update_1
      description: Aktualisiert die angegebene Regelarbeitszeit des Mitarbeiters.
      summary: Regelarbeitszeit aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID der Regelarbeitszeit
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateRegularWorkingTimeApiRequst"
      responses:
        "200":
          description: "`RegularWorkingTimeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/RegularWorkingTime"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.employees.employeeRegularWorkingTimesApi.update_2
      description: Aktualisiert die angegebene Regelarbeitszeit des Mitarbeiters.
      summary: Regelarbeitszeit aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: id
          in: path
          required: true
          description: Die ID der Regelarbeitszeit
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateRegularWorkingTimeApiRequst"
      responses:
        "200":
          description: "`RegularWorkingTimeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/RegularWorkingTime"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees:
    get:
      operationId: employees.index
      description: >-
        Liefert eine paginierte Liste der Mitarbeiter, einschließlich ihrer
        Kategorien und dynamischen

        Attribute, filterbar nach den Feldern des Mitarbeiterdatensatzes.
      summary: Mitarbeiter auflisten
      tags:
        - Employees
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: personal_number[]
          in: query
          schema:
            type:
              - array
              - "null"
            items:
              type: string
      responses:
        "200":
          description: Paginated set of `EmployeeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Employee"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: employees.store
      description: Legt einen neuen Mitarbeiterdatensatz an.
      summary: Mitarbeiter anlegen
      tags:
        - Employees
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreEmployeeRequest"
      responses:
        "201":
          description: "`EmployeeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Employee"
                      - type: object
                        required:
                          - categories
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /employees/{username}:
    get:
      operationId: employees.show
      description: >-
        Liefert einen Mitarbeiter anhand seines Benutzernamens, einschließlich
        der Anzahl seiner Fehlzeiten,

        Beschäftigungszeiträume, Regelarbeitszeiten und internen Stundensätze.
      summary: Einzelnen Mitarbeiter abrufen
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
      responses:
        "200":
          description: "`EmployeeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Employee"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.employeesApi.update_1
      description: >-
        Aktualisiert die angegebenen Felder eines bestehenden Mitarbeiters. Nur
        die übermittelten Felder werden

        geändert, alle anderen behalten ihren aktuellen Wert.
      summary: Mitarbeiter aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateEmployeeRequest"
      responses:
        "200":
          description: "`EmployeeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Employee"
                      - type: object
                        required:
                          - categories
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.employeesApi.update_2
      description: >-
        Aktualisiert die angegebenen Felder eines bestehenden Mitarbeiters. Nur
        die übermittelten Felder werden

        geändert, alle anderen behalten ihren aktuellen Wert.
      summary: Mitarbeiter aktualisieren
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateEmployeeRequest"
      responses:
        "200":
          description: "`EmployeeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Employee"
                      - type: object
                        required:
                          - categories
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /invoices:
    get:
      operationId: invoices.index
      description: >-
        Liefert nur die Kopfdaten der Rechnungen — Positionen werden separat
        über GET

        /invoices/{invoice}/items aufgelistet, Anhänge über GET
        /invoices/{invoice}/attachments.
      summary: Rechnungen auflisten, optional gefiltert und paginiert
      tags:
        - Invoices
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: invoice_number[]
          in: query
          schema:
            type:
              - array
              - "null"
            items:
              type: string
      responses:
        "200":
          description: Paginated set of `InvoiceResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Invoice"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /invoices/{invoice_number}:
    get:
      operationId: invoices.show
      description: >-
        Die Antwort enthält die Anzahl der Rechnungspositionen; die Positionen
        selbst werden

        separat über GET /invoices/{invoice}/items aufgelistet.
      summary: Einzelne Rechnung anhand ihrer Rechnungsnummer abrufen
      tags:
        - Invoices
      parameters:
        - name: invoice_number
          in: path
          required: true
          description: Die Rechnungsnummer der Rechnung
          schema:
            type: string
      responses:
        "200":
          description: "`InvoiceResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Invoice"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /invoices/{invoice_number}/attachments:
    get:
      operationId: invoices.attachments
      description: >-
        Enthält das Rechnungsdokument, dessen versandte Kopie, sobald eine
        verschickt wurde, sowie alle manuell

        angehängten Dateien.
      summary: An eine Rechnung angehängte Dateien auflisten
      tags:
        - Invoices
      parameters:
        - name: invoice_number
          in: path
          required: true
          description: Die Rechnungsnummer der Rechnung
          schema:
            type: string
      responses:
        "200":
          description: "`InvoiceAttachmentResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/InvoiceAttachment"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /invoices/{invoice_number}/items:
    get:
      operationId: invoices.items.index
      description: >-
        Wird sowohl für die Positionen einer einzelnen Rechnung (GET
        /invoices/{invoice}/items) als auch über alle

        Rechnungen hinweg (GET /invoice-items) verwendet; die für diesen
        Controller dokumentierten Filter nach Status und

        geplantem Datum gelten in beiden Fällen.
      summary: Rechnungspositionen auflisten
      tags:
        - Invoices
      parameters:
        - name: invoice_number
          in: path
          required: true
          description: Die Rechnungsnummer der Rechnung
          schema:
            type: string
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Rechnungspositions-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: status[]
          in: query
          description: >-
            Beschränkt das Ergebnis auf einen oder mehrere Status: 0 geplant, 1
            genehmigt, 2 abgerechnet,

            3 storniert. Sowohl ein einzelner Wert als auch eine Liste wird
            akzeptiert (`status[]=0&status[]=1`).
          schema:
            type: array
            items:
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
        - name: project_id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Projekt-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: planned_from
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder nach diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: planned_to
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder vor diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
      responses:
        "200":
          description: Paginated set of `InvoiceItemResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/InvoiceItem"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /invoice-items:
    get:
      operationId: invoice-items.index
      description: >-
        Wird sowohl für die Positionen einer einzelnen Rechnung (GET
        /invoices/{invoice}/items) als auch über alle

        Rechnungen hinweg (GET /invoice-items) verwendet; die für diesen
        Controller dokumentierten Filter nach Status und

        geplantem Datum gelten in beiden Fällen.
      summary: Rechnungspositionen auflisten
      tags:
        - Invoices
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Rechnungspositions-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: status[]
          in: query
          description: >-
            Beschränkt das Ergebnis auf einen oder mehrere Status: 0 geplant, 1
            genehmigt, 2 abgerechnet,

            3 storniert. Sowohl ein einzelner Wert als auch eine Liste wird
            akzeptiert (`status[]=0&status[]=1`).
          schema:
            type: array
            items:
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
        - name: project_id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Projekt-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: planned_from
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder nach diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: planned_to
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder vor diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
      responses:
        "200":
          description: Paginated set of `InvoiceItemResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/InvoiceItem"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /invoice-items/{id}:
    get:
      operationId: invoice-items.show
      description: Enthält die Erlöskontenaufteilung der Position, sofern eine dafür
        konfiguriert ist.
      summary: Einzelne Rechnungsposition anhand ihrer ID abrufen
      tags:
        - Invoices
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Rechnungsposition
          schema:
            type: integer
      responses:
        "200":
          description: "`InvoiceItemResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/InvoiceItem"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/invoice-items:
    get:
      operationId: projects.invoice-items.index
      description: >-
        Entspricht GET /invoices/{invoice}/items, jedoch auf ein Projekt statt
        auf eine einzelne

        Rechnung bezogen.
      summary: Rechnungspositionen eines Projekts über alle seine Rechnungen hinweg
        auflisten
      tags:
        - Invoices
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Rechnungspositions-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: status[]
          in: query
          description: >-
            Beschränkt das Ergebnis auf einen oder mehrere Status: 0 geplant, 1
            genehmigt, 2 abgerechnet,

            3 storniert. Sowohl ein einzelner Wert als auch eine Liste wird
            akzeptiert (`status[]=0&status[]=1`).
          schema:
            type: array
            items:
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
        - name: project_id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Projekt-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: planned_from
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder nach diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: planned_to
          in: query
          description: Nur Positionen zurückgeben, deren planned_date an oder vor diesem
            Datum liegt (einschließlich).
          schema:
            type:
              - string
              - "null"
            format: date-time
      responses:
        "200":
          description: Paginated set of `InvoiceItemResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/InvoiceItem"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /locations:
    get:
      operationId: locations.index
      description: Liefert eine paginierte Liste der in diesem Mandanten definierten
        Einsatzorte mit ihren Spesensätzen.
      summary: Einsatzorte auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: name[]
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 32
        - name: location_list_id[]
          in: query
          schema:
            type: array
            items:
              type: integer
        - name: home_work_location
          in: query
          schema:
            type:
              - boolean
              - "null"
        - name: inland
          in: query
          schema:
            type:
              - boolean
              - "null"
        - name: type
          in: query
          schema:
            anyOf:
              - $ref: "#/components/schemas/BusinessTripType"
              - type: "null"
        - name: currency[]
          in: query
          schema:
            type: array
            items:
              type: string
              minLength: 3
              maxLength: 3
      responses:
        "200":
          description: Paginated set of `LocationResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Location"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /locations/{name}:
    get:
      operationId: locations.show
      description: Liefert einen einzelnen Einsatzort, einschließlich seiner Spesensätze.
      summary: Einsatzort abrufen
      tags:
        - Masterdata
      parameters:
        - name: name
          in: path
          required: true
          description: Der Name des Einsatzorts
          schema:
            type: string
      responses:
        "200":
          description: "`LocationResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Location"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /location-lists:
    get:
      operationId: location-lists.index
      description: Liefert eine paginierte Liste der in diesem Mandanten definierten
        Ortslisten.
      summary: Ortslisten auflisten
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: meal_allowance
          in: query
          schema:
            anyOf:
              - $ref: "#/components/schemas/MealAllowance"
              - type: "null"
        - name: start_date_from
          in: query
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: start_date_to
          in: query
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: has_locations
          in: query
          schema:
            type:
              - boolean
              - "null"
      responses:
        "200":
          description: Paginated set of `LocationListResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/LocationList"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /location-lists/{id}:
    get:
      operationId: location-lists.show
      description: Liefert eine einzelne Ortsliste, einschließlich ihrer Einsatzorte.
      summary: Ortsliste abrufen
      tags:
        - Masterdata
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Ortsliste
          schema:
            type: integer
      responses:
        "200":
          description: "`LocationListResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/LocationList"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /location-lists/{id}/locations:
    get:
      operationId: location-lists.locations.index
      description: Liefert eine paginierte Liste der Einsatzorte, die zur angegebenen
        Ortsliste gehören.
      summary: Einsatzorte einer Ortsliste auflisten
      tags:
        - Masterdata
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Ortsliste
          schema:
            type: integer
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: name[]
          in: query
          schema:
            type: array
            items:
              type: string
              maxLength: 32
        - name: location_list_id[]
          in: query
          schema:
            type: array
            items:
              type: integer
        - name: home_work_location
          in: query
          schema:
            type:
              - boolean
              - "null"
        - name: inland
          in: query
          schema:
            type:
              - boolean
              - "null"
        - name: type
          in: query
          schema:
            anyOf:
              - $ref: "#/components/schemas/BusinessTripType"
              - type: "null"
        - name: currency[]
          in: query
          schema:
            type: array
            items:
              type: string
              minLength: 3
              maxLength: 3
      responses:
        "200":
          description: Paginated set of `LocationResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Location"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /offers:
    get:
      operationId: offers.index
      description: Liefert eine paginierte Liste der Angebote.
      summary: Angebote auflisten
      tags:
        - Offers
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: id[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Angebots-IDs.
          schema:
            type:
              - array
              - "null"
            items:
              type: string
      responses:
        "200":
          description: Paginated set of `OfferResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Offer"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /offers/{id}:
    get:
      operationId: offers.show
      description: Liefert ein einzelnes Angebot, einschließlich seiner Kategorien und
        der Anzahl der Positionen.
      summary: Angebot abrufen
      tags:
        - Offers
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Angebots
          schema:
            type: integer
      responses:
        "200":
          description: "`OfferResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Offer"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /offers/{id}/items:
    get:
      operationId: offers.items.index
      description: Liefert eine paginierte Liste der Positionen des angegebenen Angebots.
      summary: Positionen eines Angebots auflisten
      tags:
        - Offers
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Angebots
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `OfferItemResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/OfferItem"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /offers/{id}/items/{item_id}:
    get:
      operationId: offers.items.show
      description: Liefert eine einzelne Position des angegebenen Angebots.
      summary: Angebotsposition abrufen
      tags:
        - Offers
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Angebots
          schema:
            type: integer
        - name: item_id
          in: path
          required: true
          description: Die ID der Position
          schema:
            type: integer
      responses:
        "200":
          description: "`OfferItemResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/OfferItem"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /plannings:
    get:
      operationId: plannings.index
      description: Liefert eine paginierte Liste der Planungseinträge, optional
        ergänzt um die Standardplanung, wo keine erfasst wurde.
      summary: Planungseinträge auflisten
      tags:
        - Plannings
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: date_from
          in: query
          description: Nur Planungseinträge an oder nach diesem Datum zurückgeben.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: date_to
          in: query
          description: Nur Planungseinträge an oder vor diesem Datum zurückgeben.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: employee_ids[]
          in: query
          description: Beschränkt das Ergebnis auf einen oder mehrere
            Mitarbeiter-Benutzernamen.
          schema:
            type: array
            items:
              type: string
              maxLength: 32
        - name: project_ids[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Projekt-IDs.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: customer_numbers[]
          in: query
          description: Beschränkt das Ergebnis auf eine oder mehrere Kundennummern.
          schema:
            type: array
            items:
              type: string
              maxLength: 32
        - name: include_defaults
          in: query
          description: Die Standard-Planungseinträge des Mandanten zusätzlich zu den
            expliziten Einträgen einbeziehen.
          schema:
            type:
              - boolean
              - "null"
      responses:
        "200":
          description: Paginated set of `PlanningResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Planning"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /price-groups:
    get:
      operationId: price-groups.index
      description: Enthält auch inaktive Preisgruppen, sofern der Filter sie nicht
        ausschließt.
      summary: Preisgruppen auflisten, optional gefiltert und paginiert
      tags:
        - Masterdata
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
      responses:
        "200":
          description: Paginated set of `PriceGroupResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PriceGroup"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /price-groups/{id}:
    get:
      operationId: price-groups.show
      description: >-
        Liefert die eigenen Daten der Preisgruppe; die ihr zugeordneten Kunden
        oder Projekte sind nicht

        eingebettet.
      summary: Einzelne Preisgruppe anhand ihrer ID abrufen
      tags:
        - Masterdata
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID der Preisgruppe
          schema:
            type: integer
      responses:
        "200":
          description: "`PriceGroupResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/PriceGroup"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/activities:
    get:
      operationId: projects.activities.index
      description: Liefert eine paginierte Liste der dem angegebenen Projekt
        zugeordneten Tätigkeiten, einschließlich des projektspezifischen Faktors
        und der Reiseart.
      summary: Einem Projekt zugeordnete Tätigkeiten auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `ProjectActivityResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectActivity"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/employees:
    get:
      operationId: projects.employees.index
      description: Liefert eine paginierte Liste der dem angegebenen Projekt
        zugeordneten Mitarbeiter.
      summary: Einem Projekt zugeordnete Mitarbeiter auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: project_status
          in: query
          description: >-
            Beschränkt das Ergebnis auf Projekte in einem oder mehreren Status.
            Sowohl ein einzelner Wert

            als auch eine Liste wird akzeptiert.
          schema:
            type:
              - string
              - "null"
        - name: project_start_date
          in: query
          description: Nur Projekte zurückgeben, deren Startdatum dieses Datum oder später
            ist.
          schema:
            type: string
            format: date
        - name: project_end_date
          in: query
          description: >-
            Nur Projekte zurückgeben, deren Enddatum an oder vor diesem Datum
            liegt. Darf nicht

            vor project_start_date liegen.
          schema:
            type: string
            format: date
      responses:
        "200":
          description: Paginated set of `ProjectEmployeeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectEmployee"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /projects/{id}/locations:
    get:
      operationId: projects.locations.index
      description: Liefert eine paginierte Liste der dem angegebenen Projekt
        zugeordneten Einsatzorte.
      summary: Einem Projekt zugeordnete Einsatzorte auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `ProjectLocationResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectLocation"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/price-tables:
    get:
      operationId: projects.price-tables.index
      description: Liefert die dem angegebenen Projekt zugeordneten Preistabellen.
      summary: Preistabellen eines Projekts auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: fallback
          in: query
          description: Bei true wird auf die Preistabellen zurückgegriffen, die das
            Projekt erbt (vom Kunden oder dem Mandanten-Standard), statt nur die
            dem Projekt selbst zugeordneten zurückzugeben.
          schema:
            type: boolean
      responses:
        "200":
          description: Array of `PriceTableResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/PriceTable"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/price-tables/{price_table_id}:
    get:
      operationId: projects.price-tables.show
      description: Liefert eine einzelne dem angegebenen Projekt zugeordnete
        Preistabelle inklusive ihrer Preise und Faktoren.
      summary: Preistabelle eines Projekts abrufen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: price_table_id
          in: path
          required: true
          description: Die ID der Preistabelle
          schema:
            type: integer
      responses:
        "200":
          description: "`PriceTableResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/PriceTable"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/tasks/{task_id}/employees:
    get:
      operationId: projects.tasks.employees.index
      description: Liefert eine paginierte Liste der dem angegebenen Vorgang
        zugewiesenen Mitarbeiter inklusive ihrer Preisgruppe.
      summary: Einem Vorgang zugewiesene Mitarbeiter auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: employee_id[]
          in: query
          schema:
            type: array
            items:
              type: string
        - name: from
          in: query
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: to
          in: query
          schema:
            type:
              - string
              - "null"
            format: date-time
        - name: price_group[]
          in: query
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: Paginated set of `ProjectTaskEmployeeResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectTaskEmployee"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /projects/{id}/tasks/{task_id}/employees/{project_task_employee_id}:
    get:
      operationId: projects.tasks.employees.show
      description: Liefert eine einzelne Mitarbeiterzuordnung inklusive der
        Preisgruppe des Mitarbeiters in diesem Vorgang.
      summary: Mitarbeiterzuordnung eines Vorgangs abrufen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
        - name: project_task_employee_id
          in: path
          required: true
          description: Die ID der Vorgangszuordnung des Mitarbeiters
          schema:
            type: integer
      responses:
        "200":
          description: "`ProjectTaskEmployeeResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/ProjectTaskEmployee"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /projects/{id}/tasks:
    get:
      operationId: projects.tasks.index
      description: Liefert eine paginierte Liste der Vorgänge des angegebenen Projekts.
      summary: Vorgänge eines Projekts auflisten
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: perPage
          in: query
          description: Die Anzahl der Datensätze pro Seite.
          schema:
            type:
              - integer
              - "null"
            enum:
              - 5
              - 10
              - 15
              - null
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
        - name: project_id
          in: query
          schema:
            type:
              - integer
              - "null"
        - name: project_status_id
          in: query
          schema:
            type:
              - string
              - "null"
        - name: project_start_date
          in: query
          schema:
            type: string
            format: date-time
        - name: project_end_date
          in: query
          schema:
            type: string
            format: date-time
        - name: project_department_id
          in: query
          schema:
            type:
              - integer
              - "null"
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: search
          in: query
          schema:
            type:
              - string
              - "null"
      responses:
        "200":
          description: Paginated set of `ProjectTaskResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ProjectTask"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: projects.tasks.store
      description: Legt einen neuen Vorgang an und liefert den angelegten Datensatz.
      summary: Vorgang in einem Projekt anlegen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
          description: Kennung des Projekts, in dem der Vorgang angelegt wird.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreProjectTaskApiRequest"
      responses:
        "201":
          description: "`ProjectTaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/ProjectTask"
                      - type: object
                        required:
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /projects/{id}/tasks/{task_id}:
    get:
      operationId: projects.tasks.show
      description: Liefert einen einzelnen Vorgang des angegebenen Projekts.
      summary: Vorgang eines Projekts abrufen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
      responses:
        "200":
          description: "`ProjectTaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/ProjectTask"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.projects.projectTasksApi.update_1
      description: Aktualisiert den angegebenen Vorgang mit den in der Anfrage
        enthaltenen Feldern und liefert den aktualisierten Datensatz.
      summary: Vorgang eines Projekts aktualisieren
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProjectTaskApiRequest"
      responses:
        "200":
          description: "`ProjectTaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/ProjectTask"
                      - type: object
                        required:
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.projects.projectTasksApi.update_2
      description: Aktualisiert den angegebenen Vorgang mit den in der Anfrage
        enthaltenen Feldern und liefert den aktualisierten Datensatz.
      summary: Vorgang eines Projekts aktualisieren
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProjectTaskApiRequest"
      responses:
        "200":
          description: "`ProjectTaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/ProjectTask"
                      - type: object
                        required:
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    delete:
      operationId: projects.tasks.destroy
      description: Löscht den angegebenen Vorgang.
      summary: Vorgang eines Projekts löschen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
        - name: task_id
          in: path
          required: true
          description: Die ID des Vorgangs
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    const: Task deleted successfully
                required:
                  - message
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    const: Task could not be deleted
                required:
                  - message
  /projects:
    get:
      operationId: projects.index
      description: Liefert eine paginierte Liste der Projekte, filterbar über die von
        diesem Endpunkt akzeptierten Query-Parameter.
      summary: Projekte auflisten
      tags:
        - Projects
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type:
              - string
              - "null"
            format: date
        - name: end_date
          in: query
          schema:
            type:
              - string
              - "null"
            format: date
        - name: id[]
          in: query
          schema:
            type:
              - array
              - "null"
            items:
              type: string
        - name: status
          in: query
          schema:
            type:
              - string
              - "null"
        - name: name
          in: query
          schema:
            type:
              - string
              - "null"
        - name: search
          in: query
          schema:
            type:
              - string
              - "null"
      responses:
        "200":
          description: Paginated set of `ProjectResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Project"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: projects.store
      description: Legt ein neues Projekt an und liefert den angelegten Datensatz.
      summary: Projekt anlegen
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreProjectApiRequest"
      responses:
        "201":
          description: "`ProjectResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Project"
                      - type: object
                        required:
                          - status
                          - categories
                          - dynamicAttributes
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /projects/{id}:
    get:
      operationId: projects.show
      description: Liefert ein einzelnes Projekt inklusive seiner zugeordneten
        Kategorien, dynamischen Attribute und Preistabellen.
      summary: Projekt abrufen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
      responses:
        "200":
          description: "`ProjectResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Project"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.projectsApi.update_1
      description: Aktualisiert das angegebene Projekt mit den in der Anfrage
        enthaltenen Feldern und liefert den aktualisierten Datensatz.
      summary: Projekt aktualisieren
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProjectApiRequest"
      responses:
        "200":
          description: "`ProjectResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Project"
                      - type: object
                        required:
                          - status
                          - categories
                          - dynamicAttributes
                  info:
                    type:
                      - string
                      - "null"
                    description: >-
                      Present only when the update adjusted project data for
                      consistency; says

                      what was changed beyond what was sent.
                required:
                  - data
                  - info
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    patch:
      operationId: modules.projectsApi.update_2
      description: Aktualisiert das angegebene Projekt mit den in der Anfrage
        enthaltenen Feldern und liefert den aktualisierten Datensatz.
      summary: Projekt aktualisieren
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProjectApiRequest"
      responses:
        "200":
          description: "`ProjectResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - $ref: "#/components/schemas/Project"
                      - type: object
                        required:
                          - status
                          - categories
                          - dynamicAttributes
                  info:
                    type:
                      - string
                      - "null"
                    description: >-
                      Present only when the update adjusted project data for
                      consistency; says

                      what was changed beyond what was sent.
                required:
                  - data
                  - info
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
    delete:
      operationId: projects.destroy
      description: Löscht das angegebene Projekt.
      summary: Projekt löschen
      tags:
        - Projects
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Projekts
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The outcome of the deletion, in the tenant's language.
                    const: Project deleted successfully
                required:
                  - message
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Why the deletion could not be carried out, in the tenant's
                      language.
                    const: Project could not be deleted
                required:
                  - message
  /receipts-amounts:
    get:
      operationId: receipts-amounts.index
      description: Jede Zeile enthält weiterhin die ID ihres übergeordneten Belegs,
        sodass die Ergebnisse wieder nach Beleg gruppiert werden können.
      summary: Belegbetragszeilen aller Belege auflisten, optional gefiltert und
        paginiert
      tags:
        - Receipts
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: date_from
          in: query
          description: Nur Belegbeträge zurückgeben, deren Belegdatum an oder nach diesem
            Datum liegt.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: date_to
          in: query
          description: >-
            Nur Belegbeträge zurückgeben, deren Belegdatum an oder vor diesem
            Datum liegt. Darf nicht

            vor date_from liegen.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: employee_id
          in: query
          description: Nur Belegbeträge zurückgeben, die zu Belegen dieses Mitarbeiters
            gehören.
          schema:
            type:
              - string
              - "null"
            minLength: 1
        - name: receipt_id
          in: query
          description: Nur Belegbeträge zurückgeben, die zu diesem Beleg gehören.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `ReceiptAmountResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ReceiptAmount"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /receipts/{id}/amounts:
    get:
      operationId: receipts.amounts.index
      description: >-
        Jede Zeile hat ihren eigenen Steuersatz und ihre eigene Menge;
        is_amount_net und employee_id sind

        für alle Zeilen des Belegs gleich.
      summary: Betragszeilen eines einzelnen Belegs auflisten
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `ReceiptAmountResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ReceiptAmount"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /receipts/{id}/amounts/{amount_id}:
    get:
      operationId: receipts.amounts.show
      description: Auf den angegebenen Beleg beschränkt — der Betrag muss zu diesem gehören.
      summary: Einzelne Betragszeile eines Belegs abrufen
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
        - name: amount_id
          in: path
          required: true
          description: Die ID des Belegbetrags
          schema:
            type: integer
      responses:
        "200":
          description: "`ReceiptAmountResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/ReceiptAmount"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /receipts:
    get:
      operationId: receipts.index
      description: >-
        Liefert nur die Kopfdaten der Belege; Betragszeilen werden separat über
        GET

        /receipts/{receipt}/amounts aufgelistet.
      summary: Belege auflisten, optional gefiltert und paginiert
      tags:
        - Receipts
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
      responses:
        "200":
          description: Paginated set of `ReceiptResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Receipt"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: receipts.store
      description: >-
        Validiert die Nutzdaten und leitet sie an das Beleg-Backend weiter; der
        angelegte Beleg wird

        in derselben Form wie bei GET /receipts/{receipt} zurückgegeben.
      summary: Neuen Beleg buchen
      tags:
        - Receipts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StoreReceiptRequest"
      responses:
        "200":
          description: "`ReceiptResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Receipt"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
  /receipts/{id}:
    get:
      operationId: receipts.show
      description: |-
        Liefert nur den Belegkopf; die Betragszeilen werden separat über GET
        /receipts/{receipt}/amounts aufgelistet.
      summary: Einzelnen Beleg anhand seiner ID abrufen
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      responses:
        "200":
          description: "`ReceiptResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Receipt"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.receiptsApi.update_1
      description: >-
        In den Nutzdaten ausgelassene Felder behalten ihren aktuellen Wert; wird
        receiptAmounts ausgelassen, bleiben

        die aktuellen Betragszeilen des Belegs erhalten.
      summary: Bestehenden Beleg aktualisieren
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateReceiptRequest"
      responses:
        "200":
          description: "`ReceiptResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Receipt"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    patch:
      operationId: modules.receiptsApi.update_2
      description: >-
        In den Nutzdaten ausgelassene Felder behalten ihren aktuellen Wert; wird
        receiptAmounts ausgelassen, bleiben

        die aktuellen Betragszeilen des Belegs erhalten.
      summary: Bestehenden Beleg aktualisieren
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateReceiptRequest"
      responses:
        "200":
          description: "`ReceiptResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Receipt"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    delete:
      operationId: receipts.destroy
      description: Entfernt auch die zugehörigen Betragszeilen und eine eventuell
        angehängte Datei.
      summary: Beleg löschen
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
  /receipts/{id}/attachments:
    get:
      operationId: receipts.attachments
      description: Die Bytes der Datei werden base64-kodiert in file_contents zurückgegeben.
      summary: An einen Beleg angehängte Datei abrufen, sofern eine hochgeladen wurde
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      responses:
        "200":
          description: "`ReceiptAttachmentResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/ReceiptAttachment"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: receipts.uploadAttachment
      description: Der Dateiinhalt wird base64-kodiert in file_contents übertragen.
      summary: An einen Beleg angehängte Datei hochladen oder ersetzen
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_contents:
                  type: string
                  description: The file's bytes, base64-encoded.
                filename:
                  type: string
                  description: The name to store the file under.
              required:
                - file_contents
                - filename
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
    delete:
      operationId: receipts.deleteAttachment
      description: Hat keine Auswirkung, wenn der Beleg keine angehängte Datei hat.
      summary: An einen Beleg angehängte Datei entfernen
      tags:
        - Receipts
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Belegs
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
  /resource-plannings:
    get:
      operationId: resource-plannings.index
      description: >-
        Liefert eine paginierte Liste der Planungen der Ressourcenplanung,
        jeweils mit den geplanten

        Stunden insgesamt und pro Monat. Nur mit der Ressourcenplanung
        (MOD_PLANNING_NEXT oder

        Produktlinie 4 ohne MOD_RESSOURCENPLANUNG); Mandanten mit der bisherigen
        Planung nutzen weiterhin

        GET /plannings.
      summary: Planungen der Ressourcenplanung auflisten
      tags:
        - ResourcePlannings
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: date_from
          in: query
          description: Nur Planungen zurückgeben, die an oder nach diesem Datum enden.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: date_to
          in: query
          description: Nur Planungen zurückgeben, die an oder vor diesem Datum beginnen.
          schema:
            type:
              - string
              - "null"
            format: date
        - name: employee_ids[]
          in: query
          description: Das Ergebnis auf einen oder mehrere Mitarbeiter (Benutzernamen)
            einschränken.
          schema:
            type: array
            items:
              type: string
              maxLength: 32
        - name: project_ids[]
          in: query
          description: Das Ergebnis auf ein oder mehrere Projekte (IDs) einschränken.
          schema:
            type: array
            items:
              type: integer
              minimum: 1
        - name: customer_numbers[]
          in: query
          description: Das Ergebnis auf die Projekte eines oder mehrerer Kunden
            einschränken.
          schema:
            type: array
            items:
              type: string
              maxLength: 32
      responses:
        "200":
          description: Paginated set of `ResourcePlanningResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ResourcePlanning"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /tickets/{id}/subtasks:
    get:
      operationId: tickets.subtasks.index
      description: Liefert eine paginierte Liste der Teilaufgaben des angegebenen Tickets.
      summary: Teilaufgaben eines Tickets auflisten
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `SubtaskResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Subtask"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    post:
      operationId: tickets.subtasks.store
      description: Legt eine Teilaufgabe im angegebenen Ticket an und liefert sie zurück.
      summary: Teilaufgabe eines Tickets anlegen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SubtaskStoreRequest"
      responses:
        "200":
          description: "`SubtaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Subtask"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
  /tickets/{id}/subtasks/{subtask_id}:
    get:
      operationId: tickets.subtasks.show
      description: Liefert eine einzelne Teilaufgabe des angegebenen Tickets.
      summary: Teilaufgabe eines Tickets abrufen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
        - name: subtask_id
          in: path
          required: true
          description: Die ID der Teilaufgabe
          schema:
            type: integer
      responses:
        "200":
          description: "`SubtaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Subtask"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.tickets.ticketSubtaskApi.update_1
      description: >-
        Aktualisiert eine Teilaufgabe des angegebenen Tickets und liefert sie
        zurück. In der Anfrage ausgelassene Felder behalten

        den aktuellen Wert der Teilaufgabe.
      summary: Teilaufgabe eines Tickets aktualisieren
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
        - name: subtask_id
          in: path
          required: true
          description: Die ID der Teilaufgabe
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SubtaskUpdateRequest"
      responses:
        "200":
          description: "`SubtaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Subtask"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    patch:
      operationId: modules.tickets.ticketSubtaskApi.update_2
      description: >-
        Aktualisiert eine Teilaufgabe des angegebenen Tickets und liefert sie
        zurück. In der Anfrage ausgelassene Felder behalten

        den aktuellen Wert der Teilaufgabe.
      summary: Teilaufgabe eines Tickets aktualisieren
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
        - name: subtask_id
          in: path
          required: true
          description: Die ID der Teilaufgabe
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SubtaskUpdateRequest"
      responses:
        "200":
          description: "`SubtaskResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Subtask"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    delete:
      operationId: tickets.subtasks.destroy
      description: Löscht die Teilaufgabe aus dem angegebenen Ticket.
      summary: Teilaufgabe eines Tickets löschen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
        - name: subtask_id
          in: path
          required: true
          description: Die ID der Teilaufgabe
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      success:
                        type: boolean
                      message:
                        anyOf:
                          - type: string
                          - type: string
                            enum:
                              - Failed to delete subtask
                    required:
                      - success
                      - message
                  - type: object
                    properties:
                      success:
                        type: boolean
                        description: Whether the operation succeeded.
                    required:
                      - success
  /tickets:
    get:
      operationId: tickets.index
      description: Liefert eine paginierte Liste der Tickets.
      summary: Tickets auflisten
      tags:
        - Tickets
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: start_date
          in: query
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          schema:
            type: string
            format: date
      responses:
        "200":
          description: Paginated set of `TicketResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Ticket"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
    post:
      operationId: tickets.store
      description: >-
        Legt ein Ticket über den Ticket-API-Dienst an und liefert es zurück.
        Erfordert entweder den

        Benutzernamen eines Erstellers oder einen Ansprechpartner des Kunden.
      summary: Ticket anlegen
      tags:
        - Tickets
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TicketStoreRequest"
      responses:
        "200":
          description: "`TicketResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Ticket"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
  /tickets/{id}:
    get:
      operationId: tickets.show
      description: Liefert ein einzelnes Ticket inklusive seiner Kategorien.
      summary: Ticket abrufen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      responses:
        "200":
          description: "`TicketResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Ticket"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
    put:
      operationId: modules.ticketsApi.update_1
      description: >-
        Aktualisiert ein Ticket über den Ticket-API-Dienst und liefert es
        zurück. In der Anfrage ausgelassene Felder

        behalten den aktuellen Wert des Tickets.
      summary: Ticket aktualisieren
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TicketUpdateRequest"
      responses:
        "200":
          description: "`TicketResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Ticket"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    patch:
      operationId: modules.ticketsApi.update_2
      description: >-
        Aktualisiert ein Ticket über den Ticket-API-Dienst und liefert es
        zurück. In der Anfrage ausgelassene Felder

        behalten den aktuellen Wert des Tickets.
      summary: Ticket aktualisieren
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TicketUpdateRequest"
      responses:
        "200":
          description: "`TicketResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Ticket"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "403":
          $ref: "#/components/responses/AuthorizationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "422":
          $ref: "#/components/responses/ValidationException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                required:
                  - success
                  - message
    delete:
      operationId: tickets.destroy
      description: Löscht das Ticket über den Ticket-API-Dienst.
      summary: Ticket löschen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      success:
                        type: boolean
                      message:
                        anyOf:
                          - type: string
                          - type: string
                            enum:
                              - Failed to delete ticket
                    required:
                      - success
                      - message
                  - type: object
                    properties:
                      success:
                        type: boolean
                        description: Whether the operation succeeded.
                    required:
                      - success
  /tickets/{id}/attachments:
    post:
      operationId: tickets.uploadAttachment
      description: Hängt eine base64-kodierte Datei an das Ticket an.
      summary: Ticket-Anhang hochladen
      tags:
        - Tickets
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Tickets
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_contents:
                  type: string
                  description: The file's bytes, base64-encoded.
                filename:
                  type: string
                  description: The name to store the file under.
              required:
                - file_contents
                - filename
      responses:
        "200":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the upload succeeded.
                required:
                  - success
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
        "500":
          description: ""
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the upload succeeded.
                required:
                  - success
  /employees/{username}/transponders:
    get:
      operationId: employees.transponders.index
      description: Liefert die paginierte Liste der dem angegebenen Mitarbeiter
        zugewiesenen RFID-Transponder.
      summary: Transponder eines Mitarbeiters auflisten
      tags:
        - Employees
      parameters:
        - name: username
          in: path
          required: true
          description: Der Benutzername des Mitarbeiters
          schema:
            type: string
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
      responses:
        "200":
          description: Paginated set of `TransponderResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Transponder"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
  /workhour-balances:
    get:
      operationId: workhour-balances.index
      description: Liefert die zwischengespeicherten Überstundensalden und
        Urlaubsansprüche, filterbar nach Mitarbeiter.
      summary: Stundenkonten auflisten
      tags:
        - WorkhourBalances
      parameters:
        - name: perPage
          in: query
          description: >-
            Wird auf diesem Endpunkt ignoriert — senden Sie stattdessen `limit`.
            Ein hier angegebener Wert wird durch

            `limit` ersetzt, oder durch den Standardwert, wenn `limit` fehlt.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: page
          in: query
          description: Die zurückzugebende Ergebnisseite, beginnend bei 1.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
        - name: orderBy
          in: query
          description: Name des Feldes, nach dem sortiert wird.
          schema:
            type:
              - string
              - "null"
        - name: order
          in: query
          description: Sortierrichtung, aufsteigend oder absteigend.
          schema:
            type:
              - string
              - "null"
            enum:
              - asc
              - desc
              - null
        - name: limit
          in: query
          description: Die Anzahl der Datensätze pro Seite, 1 bis 200. Standardwert ist 15.
          schema:
            type:
              - integer
              - "null"
            minimum: 1
            maximum: 200
        - name: modified_after
          in: query
          description: Nur Datensätze zurückgeben, die nach diesem Zeitstempel geändert
            wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: modified_before
          in: query
          description: Nur Datensätze zurückgeben, die vor oder zu diesem Zeitstempel
            geändert wurden (ISO 8601 oder "Y-m-d H:i:s").
          schema:
            type: string
            format: date-time
        - name: employee_id
          in: query
          description: Nur Stundenkonten dieses Mitarbeiters zurückgeben, angegeben als
            Benutzername.
          schema:
            type:
              - string
              - "null"
      responses:
        "200":
          description: Paginated set of `WorkHourBalanceResource`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/WorkHourBalance"
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - "null"
                      last:
                        type:
                          - string
                          - "null"
                      prev:
                        type:
                          - string
                          - "null"
                      next:
                        type:
                          - string
                          - "null"
                    required:
                      - first
                      - last
                      - prev
                      - next
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        minimum: 1
                      from:
                        type:
                          - integer
                          - "null"
                        minimum: 1
                      last_page:
                        type: integer
                        minimum: 1
                      links:
                        type: array
                        description: Generated paginator links.
                        items:
                          type: object
                          properties:
                            url:
                              type:
                                - string
                                - "null"
                            label:
                              type: string
                            active:
                              type: boolean
                          required:
                            - url
                            - label
                            - active
                      path:
                        type:
                          - string
                          - "null"
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      to:
                        type:
                          - integer
                          - "null"
                        description: Number of the last item in the slice.
                        minimum: 1
                      total:
                        type: integer
                        description: Total number of items being paginated.
                        minimum: 0
                    required:
                      - current_page
                      - from
                      - last_page
                      - links
                      - path
                      - per_page
                      - to
                      - total
                required:
                  - data
                  - links
                  - meta
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "422":
          $ref: "#/components/responses/ValidationException"
  /workhour-balances/{id}:
    get:
      operationId: workhour-balances.show
      description: Liefert den zwischengespeicherten Überstundensaldo und
        Urlaubsanspruch eines einzelnen Mitarbeiters.
      summary: Einzelnes Stundenkonto abrufen
      tags:
        - WorkhourBalances
      parameters:
        - name: id
          in: path
          required: true
          description: Die ID des Stundenkontos
          schema:
            type: integer
      responses:
        "200":
          description: "`WorkHourBalanceResource`"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/WorkHourBalance"
                required:
                  - data
        "401":
          $ref: "#/components/responses/AuthenticationException"
        "404":
          $ref: "#/components/responses/ModelNotFoundException"
components:
  schemas:
    AbsenceReason:
      type: object
      properties:
        name:
          type: string
          description: Eindeutiges Kürzel, das den Grund identifiziert; zugleich sein
            Routenschlüssel.
          example: EU
        comment:
          type:
            - string
            - "null"
          description: Freitextnotiz, die neben dem Grund im Kalender und in Berichten
            angezeigt wird.
          example: Elternurlaub|en:Parental leave
        approve:
          type:
            - boolean
            - "null"
          description: Ob eine Buchung mit diesem Grund genehmigt werden muss, bevor sie
            angerechnet wird.
          example: true
        allow_self_entry:
          type: boolean
          description: Ob Mitarbeiter diesen Grund selbst buchen dürfen, ohne einen
            Vorgesetzten einzubeziehen.
          example: true
        allow_half_day_holiday:
          type:
            - integer
            - "null"
          description: Ob dieser Grund für einen halben Tag statt nur für ganze Tage
            gebucht werden kann.
          example: 1
        allow_hours_of_vacation:
          type:
            - integer
            - "null"
          description: Ob dieser Grund in einzelnen Stunden statt nur in ganzen Tagen
            gebucht werden kann.
          example: 1
        anyone_can_see_name:
          type:
            - boolean
            - "null"
          description: Ob Kollegen, die die Fehlzeit nicht gebucht haben, den Namen dieses
            Grundes trotzdem sehen können.
          example: true
        color:
          type: string
          description: Farbe, mit der Buchungen dieses Grundes im Kalender hervorgehoben
            werden.
          example: "#664599"
        type:
          type:
            - object
            - "null"
          description: Die Kategorie der Fehlzeit, die dieser Grund darstellt, z. B.
            Jahresurlaub, bezahlte oder unbezahlte Fehlzeit, Gleitzeit oder
            Homeoffice.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - annual holiday
                - paid absence
                - unpaid absence
                - flexitime
                - time off in lieu for business travel
                - homeoffice
          required:
            - id
            - name
        client_calendar_category:
          type:
            - string
            - "null"
          description: Kategorie, auf die dieser Grund in einem vom Client
            synchronisierten externen Kalender abgebildet wird.
        inform_employee_upon_approval_or_revocation:
          type:
            - integer
            - "null"
          description: Ob der Mitarbeiter per E-Mail benachrichtigt wird, wenn eine
            Buchung mit diesem Grund genehmigt oder widerrufen wird.
          example: 1
        external_id:
          type:
            - string
            - "null"
          description: Kennung, mit der dieser Grund auf den passenden Fehlzeittyp in
            einem angebundenen externen System abgebildet wird.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung des Grundes.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung des Grundes.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - name
        - comment
        - approve
        - allow_self_entry
        - allow_half_day_holiday
        - allow_hours_of_vacation
        - anyone_can_see_name
        - color
        - type
        - client_calendar_category
        - inform_employee_upon_approval_or_revocation
        - external_id
        - created
        - modified
      title: AbsenceReasonResource
    Absence:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Fehlzeit.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, zu dem diese Fehlzeit gehört.
          example: max.mustermann
        type:
          description: Ob die Fehlzeit einen ganzen Tag, einen halben Tag oder eine Anzahl
            von Stunden umfasst.
          allOf:
            - $ref: "#/components/schemas/AbsenceType"
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Erster Kalendertag, den die Fehlzeit umfasst.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Letzter Kalendertag, den die Fehlzeit umfasst.
          example: 2024-01-16T00:00:00.000000Z
        hours:
          type:
            - number
            - "null"
          description: Anzahl der Fehlstunden, nur bei einer stundenweisen Fehlzeit gesetzt.
          example: 1.5
        from:
          type:
            - string
            - "null"
          description: Uhrzeit, zu der die stundenweise Fehlzeit beginnt, nur bei einer
            stundenweisen Fehlzeit gesetzt.
        to:
          type:
            - string
            - "null"
          description: Uhrzeit, zu der die stundenweise Fehlzeit endet, nur bei einer
            stundenweisen Fehlzeit gesetzt.
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Fehlzeit.
          example: Familienurlaub
        approved:
          type: boolean
          description: Ob die Fehlzeit genehmigt und nicht nur geplant ist.
          example: true
        timezone:
          type:
            - string
            - "null"
          description: Zeitzone, in der die from/to-Zeiten der Fehlzeit angegeben sind.
          example: Asia/Oral
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erfassung der Fehlzeit.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung der Fehlzeit.
          example: 2024-07-20T12:30:00.000000Z
        absence_reason_id:
          type: string
          description: Kennung des Fehlgrundes (Urlaub, Krankheit, ...), unter dem diese
            Fehlzeit abgelegt ist.
          example: UB
        absenceReason:
          description: Der Fehlgrund, unter dem diese Fehlzeit abgelegt ist.
          allOf:
            - $ref: "#/components/schemas/AbsenceReason"
        leaveApprovalApplication:
          description: >-
            Der Genehmigungsantrag, den diese Fehlzeit durchlaufen hat, sofern
            der Mandant

            verlangt, dass Fehlzeiten vor ihrem Wirksamwerden genehmigt werden.
          allOf:
            - $ref: "#/components/schemas/LeaveApprovalApplication"
      required:
        - id
        - employee_id
        - type
        - start_date
        - end_date
        - hours
        - from
        - to
        - note
        - approved
        - timezone
        - created
        - modified
        - absence_reason_id
      title: AbsenceResource
    AbsenceType:
      type: integer
      description: >
        Whether an absence spans a full day, a half day, or is expressed as a
        number of hours.
      enum:
        - 0
        - 1
        - 2
      title: AbsenceType
    Activity:
      type: object
      properties:
        name:
          type: string
          description: Name der Tätigkeit.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitextbeschreibung der Tätigkeit.
          example: Angebot|en:offer
        is_travel:
          type: boolean
          description: Ob die Tätigkeit als Reisezeit zählt.
          example: false
        is_goodwill:
          type:
            - boolean
            - "null"
          description: Ob die Tätigkeit nicht abrechenbare Kulanzarbeit ist, die dem
            Kunden nicht in Rechnung gestellt wird.
          example: true
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Tätigkeit.
          example: Familienurlaub
        travel_type:
          type:
            - object
            - "null"
          description: Ob die Tätigkeit reine Reise, reiner Bereitschaftsdienst oder
            sowohl Reise als auch Bereitschaftsdienst ist.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Pure travel
                - Purely on call
                - Travel and on call
          required:
            - id
            - name
      required:
        - name
        - description
        - is_travel
        - is_goodwill
        - note
        - travel_type
      title: ActivityResource
    Article:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Artikels.
          example: 1
        article_number:
          type:
            - string
            - "null"
          description: Die Artikelnummer, über die dieser Artikel extern referenziert wird.
          example: ART-001
        name:
          type:
            - string
            - "null"
          description: Name des Artikels, wie er auf Rechnungen und Preislisten angezeigt
            wird.
          example: EU
        unit:
          type:
            - string
            - "null"
          description: Die Einheit, in der dieser Artikel bepreist und abgerechnet wird,
            z. B. Stück oder Stunde.
          example: Stunde
        unit_price:
          type:
            - number
            - "null"
          description: Preis des Artikels pro Einheit in der angegebenen Währung.
          example: 1.5
        currency:
          type:
            - string
            - "null"
          description: Der dreistellige Währungscode, in dem unit_price angegeben ist.
          example: EUR
        description:
          type:
            - string
            - "null"
          description: Standard-Beschreibungstext des Artikels in der Hauptsprache des
            Mandanten.
          example: Angebot|en:offer
        inactive:
          type: boolean
          description: Ob der Artikel deaktiviert wurde und in neuen Auswahlen
            ausgeblendet ist.
          example: false
        description_en:
          type:
            - string
            - "null"
          description: Beschreibungstext des Artikels auf Englisch, für mehrsprachige
            Rechnungen.
          example: Professional consulting services
        description_fr:
          type:
            - string
            - "null"
          description: Beschreibungstext des Artikels auf Französisch, für mehrsprachige
            Rechnungen.
          example: Développement de logiciels
        description_es:
          type:
            - string
            - "null"
          description: Beschreibungstext des Artikels auf Spanisch, für mehrsprachige
            Rechnungen.
        description_pl:
          type:
            - string
            - "null"
          description: Beschreibungstext des Artikels auf Polnisch, für mehrsprachige
            Rechnungen.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitpunkt, zu dem der Artikeldatensatz erstellt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitpunkt, zu dem der Artikeldatensatz zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - article_number
        - name
        - unit
        - unit_price
        - currency
        - description
        - inactive
        - description_en
        - description_fr
        - description_es
        - description_pl
        - created
        - modified
      title: ArticleResource
    AttendanceTravelDirection:
      type: integer
      description: >
        Direction of the travel a booking records: the outbound leg, a
        continuation of it, or the return leg.
      enum:
        - 0
        - 1
        - 2
      title: AttendanceTravelDirection
    Attendances:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Buchung.
          example: 1
        date:
          type: string
          format: date-time
          description: Kalendertag, zu dem die Buchung gehört.
          example: 2024-07-20T00:00:00.000000Z
        from:
          type: string
          description: Uhrzeit, zu der die Buchung beginnt.
        to:
          type: string
          description: >-
            Uhrzeit, zu der die Buchung endet. Der Wert 00:00 kennzeichnet eine
            Buchung, die über

            Mitternacht hinausgeht — siehe `end_date` für den Kalendertag, an
            dem sie tatsächlich endet.
        end_date:
          type: string
          description: >-
            Kalendertag, an dem die Buchung tatsächlich endet. `to` allein ist
            bei einer

            Tagesende-Buchung mehrdeutig (gespeichert als to='00:00:00' mit
            demselben Datum, gemeint ist aber der Folgetag,

            siehe Attendance::toAsCarbon()) — dieses Feld macht den
            Tagesübergang für API-Konsumenten/Konnektoren

            explizit, ohne das bestehende to/from/date-Format zu ändern
            (SQ2-366).
          example: 2024-01-16T00:00:00.000000Z
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, zu dem diese Buchung gehört.
          example: max.mustermann
        duration:
          type: number
          description: Gebuchte Dauer in Stunden, abgeleitet aus `from` und `to`.
          example: 1.5
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Buchung.
          example: Familienurlaub
        issue_id:
          type:
            - string
            - "null"
          description: Freitextreferenz auf ein externes Ticket/Issue, auf das sich diese
            Buchung bezieht. Nur in Instanzen mit der Erweiterung MOD_PROXORA.
            Keine allgemein verfügbare Funktion.
        department_id:
          type: integer
          description: Die Abteilung, der der Mitarbeiter zum Zeitpunkt der Buchung
            zugeordnet war. Nur mit Modul Abteilungen (MOD_ABT).
          example: 1
        project_release:
          type:
            - object
            - "null"
          description: >-
            Genehmigungsstatus des Projektfreigabe-Workflows für diese Buchung.
            Nur

            vorhanden, wenn die Projektfreigabe per Konfiguration erforderlich
            ist.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - unchanged
                - zu prüfen
                - freigegeben
                - abgerechnet
          required:
            - id
            - name
        project_released_at:
          type:
            - string
            - "null"
          format: date-time
          description: >-
            Zeitstempel, zu dem die Projektfreigabe für diese Buchung erteilt
            wurde. Nur

            vorhanden, wenn die Projektfreigabe per Konfiguration erforderlich
            ist.
          example: 2024-06-24 17:46:25
        project_released_by:
          type:
            - string
            - "null"
          description: >-
            Benutzername des Mitarbeiters, der die Projektfreigabe für diese
            Buchung erteilt hat.

            Nur vorhanden, wenn die Projektfreigabe per Konfiguration
            erforderlich ist.
          example: max.mustermann
        billable:
          type: boolean
          description: Gibt an, ob die Zeitbuchung abrechenbar ist.
          example: true
        work_location_id:
          type:
            - string
            - "null"
          description: ID des Einsatzorts. Muss existieren.
        activity_id:
          type: string
          description: Die ID der zugehörigen Tätigkeit.
          example: im
        start:
          type:
            - string
            - "null"
          description: Ausgangspunkt der Fahrt.
          example: Location A
        destination:
          type:
            - string
            - "null"
          description: Ziel der Fahrt.
          example: Location B
        vehicle_id:
          type:
            - string
            - "null"
          description: Die ID des verwendeten Fahrzeugs.
        private:
          type:
            - boolean
            - "null"
          description: Gibt an, ob die Fahrt privat war.
          example: true
        passengers:
          type:
            - integer
            - "null"
          description: Anzahl der Mitfahrer.
          example: 2
        km:
          type:
            - integer
            - "null"
          description: Zurückgelegte Strecke in Kilometern.
          example: 120
        direction_of_travel:
          type:
            - object
            - "null"
          description: Fahrtrichtung (z. B. continue).
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - outward
                - continue
                - return
          required:
            - id
            - name
        project_id:
          type: integer
          description: Die ID des zugehörigen Projekts.
          example: 16
        project_task_id:
          type: integer
          description: Die ID des zugehörigen Vorgangs.
          example: 1
        invoice_item_id:
          type:
            - integer
            - "null"
          description: Die ID der Rechnungsposition, über die diese Buchung abgerechnet
            wurde, sobald sie fakturiert ist.
          example: 1
        ticket_id:
          type:
            - integer
            - "null"
          description: Die ID des Tickets, zu dem diese Buchung gehört.
          example: 1234
        subtask_id:
          type:
            - integer
            - "null"
          description: Die ID der Teilaufgabe des Tickets, zu der diese Buchung gehört.
          example: 1
        work_location_is_project_relevant:
          type: boolean
          description: Gibt an, ob der Einsatzort projektbezogen ist.
          example: true
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung der Buchung.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung der Buchung.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - date
        - from
        - to
        - end_date
        - employee_id
        - duration
        - note
        - created
        - modified
      title: AttendancesResource
    BillingType:
      type: integer
      description: |
        How a project is billed: hourly rate, daily rate, or a single flat rate.
      enum:
        - 1
        - 2
        - 3
      title: BillingType
    BreakRegulationType:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Pausenregelung.
          example: 1
        name:
          type: string
          description: Anzeigename der Pausenregelung.
          example: EU
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem die Pausenregelung angelegt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem die Pausenregelung zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - name
        - created
        - modified
      title: BreakRegulationTypeResource
    BusinessTripType:
      type: integer
      description: |
        Class BusinessTripType
      enum:
        - 0
        - 1
      title: BusinessTripType
    Category:
      type: object
      properties:
        name:
          type: string
          description: Name der Kategorie, wird überall angezeigt, wo eine Entität damit
            gekennzeichnet ist.
          example: EU
        description:
          type: object
          description: Ausführlichere Erläuterung, wofür diese Kategorie verwendet werden
            soll.
          properties:
            de:
              type:
                - string
                - "null"
            en:
              type: string
            fr:
              type: string
            es:
              type: string
            pl:
              type: string
        type:
          type: object
          description: Art der Entität, der diese Kategorie zugeordnet werden kann, z. B.
            Mitarbeiter, Projekt oder Kunde.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Mitarbeiter/in
                - Projekt
                - Kunde
                - Dokument
                - Angebot
                - Kontakt
                - Ticket
                - Ticket2
                - Ticket3
          required:
            - id
            - name
      required:
        - name
        - description
        - type
      title: CategoryResource
    CustomerAddress:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige ID der Adresse.
          example: 1
        name:
          type: string
          description: Der auf dieser Adresse gedruckte Empfängername.
          example: EU
        address:
          type:
            - string
            - "null"
          description: Erste Adresszeile (Straße und Hausnummer).
          example: Musterstraße 123
        address_line_2:
          type:
            - string
            - "null"
          description: Optionale zweite Adresszeile.
        address_line_3:
          type:
            - string
            - "null"
          description: Optionale dritte Adresszeile.
        zip_code:
          type:
            - string
            - "null"
          description: Die Postleitzahl.
          example: "10115"
        city:
          type:
            - string
            - "null"
          description: Ort, in dem sich diese Adresse befindet.
          example: Berlin
        country:
          type:
            - string
            - "null"
          description: Der Ländername.
          example: Deutschland
        is_default:
          type:
            - boolean
            - "null"
          description: Ob dies die Standardadresse des Kunden ist.
          example: true
        is_billing_address:
          type:
            - boolean
            - "null"
          description: Ob Rechnungen an diese Adresse gesendet werden.
          example: true
        is_shipping_address:
          type:
            - boolean
            - "null"
          description: Ob Lieferungen an diese Adresse gesendet werden.
          example: true
        email:
          type:
            - string
            - "null"
          description: E-Mail-Adresse, an die Dokumente für diese Adresse gesendet werden.
          example: erika.mustermann@acme-corp.de
        email_cc:
          type:
            - string
            - "null"
          description: Zusätzliche E-Mail-Adresse, die bei Dokumenten an diese Adresse in
            Kopie (CC) gesetzt wird.
        email_bcc:
          type:
            - string
            - "null"
          description: Zusätzliche E-Mail-Adresse, die bei Dokumenten an diese Adresse in
            Blindkopie (BCC) gesetzt wird.
        country_code:
          type:
            - string
            - "null"
          description: ISO-Ländercode für die E-Rechnung (ZUGFeRD/XRechnung).
        inactive:
          type:
            - boolean
            - "null"
          description: Ob diese Adresse inaktiv ist und nicht mehr verwendet wird.
          example: false
        machine_readable_invoice_version:
          type:
            - object
            - "null"
          description: Maschinenlesbares E-Rechnungsformat (z. B. ZUGFeRD, XRechnung), das
            diese Adresse unterstützt, sofern vorhanden.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - ZUGFeRD1
                - ZUGFeRD2
                - ZUGFeRD 2.2
                - ZUGFeRD 2.3
                - XRechnung actual
                - XRechnung 2.0 (from 2021-01-01)
                - XRechnung 2.1 (from 2022-02-01)
                - XRechnung 2.2 (from 2022-08-01)
                - XRechnung 2.3.1 (from 2023-08-01)
                - XRechnung 3.0.1 (from 2024-02-01)
                - SwissQR
                - SwissQR (SWICO)
                - NONE
          required:
            - id
            - name
      required:
        - id
        - name
        - address
        - address_line_2
        - address_line_3
        - zip_code
        - city
        - country
        - is_default
        - is_billing_address
        - is_shipping_address
        - email
        - email_cc
        - email_bcc
        - country_code
        - inactive
        - machine_readable_invoice_version
      title: CustomerAddressResource
    CustomerContactPrimary:
      type: string
      description: >
        Whether this contact is the customer's primary contact (`prim`) or a
        secondary one (`sec`).
      enum:
        - prim
        - sec
      title: CustomerContactPrimary
    CustomerContact:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige ID des Ansprechpartners.
          example: 1
        first_name:
          type: string
          description: Vorname des Ansprechpartners.
          example: Erika
        last_name:
          type: string
          description: Nachname des Ansprechpartners.
          example: Mustermann
        salutation:
          type:
            - string
            - "null"
          description: Anrede des Ansprechpartners (z. B. Herr/Frau), wird in der
            Korrespondenz verwendet.
          example: Frau
        title:
          type:
            - string
            - "null"
          description: Akademischer Titel des Ansprechpartners (z. B. Dr.).
          example: Dr.
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Ansprechpartners.
          example: +49 30 12345678
        mobile:
          type:
            - string
            - "null"
          description: Mobilnummer des Ansprechpartners.
          example: +49 170 1234567
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Ansprechpartners.
          example: +1-555-0124
        email:
          type:
            - string
            - "null"
          description: E-Mail-Adresse des Ansprechpartners.
          example: erika.mustermann@acme-corp.de
        primary:
          type: boolean
          description: Ob dies der Hauptansprechpartner des Kunden ist.
          example: true
        job_title:
          type:
            - string
            - "null"
          description: Position des Ansprechpartners beim Kunden.
          example: Leiterin Einkauf
        department:
          type:
            - string
            - "null"
          description: Freitext-Abteilungsname für diesen Ansprechpartner — ohne Bezug zum
            Abteilungsmodul.
          example: Einkauf
        language:
          type:
            - string
            - "null"
          description: Bevorzugte Sprache des Ansprechpartners, wird für übersetzte
            Inhalte verwendet.
          example: de
        inactive:
          type: boolean
          description: Ob dieser Ansprechpartner inaktiv ist und nicht mehr aktiv
            verwendet wird.
          example: false
        categories:
          type: array
          description: >-
            Die diesem Ansprechpartner zugeordneten Kategorien. Enthalten bei
            GET /customers/{customer}/contacts/{contact},

            POST .../contacts und PUT .../contacts/{contact}; nicht enthalten
            beim Listen-Endpunkt

            GET /customers/{customer}/contacts.
          items:
            $ref: "#/components/schemas/Category"
      required:
        - id
        - first_name
        - last_name
        - salutation
        - title
        - phone
        - mobile
        - fax
        - email
        - primary
        - job_title
        - department
        - language
        - inactive
      title: CustomerContactResource
    CustomerEmployee:
      type: object
      properties:
        username:
          type: string
          description: Benutzername des für diesen Kunden verantwortlichen Mitarbeiters.
          example: max.mustermann
        has_edit_customer_data_permission:
          type:
            - boolean
            - "null"
          description: Ob dieser Mitarbeiter die Stammdaten des Kunden bearbeiten darf.
          example: true
        has_budget_responsibility_permission:
          type:
            - boolean
            - "null"
          description: Ob dieser Mitarbeiter Budgetverantwortung für diesen Kunden hat.
          example: true
        is_primary_employee:
          type:
            - boolean
            - "null"
          description: Ob dieser Mitarbeiter der Hauptverantwortliche des Kunden ist.
          example: true
      required:
        - username
        - has_edit_customer_data_permission
        - has_budget_responsibility_permission
        - is_primary_employee
      title: CustomerEmployeeResource
    Customer:
      type: object
      properties:
        customer_number:
          type: string
          description: Eindeutige Kennung des Kunden; wird in der URL als Primärschlüssel
            verwendet.
          example: K-12345
        name:
          type:
            - string
            - "null"
          description: Name des Kunden.
          example: EU
        additional_name:
          type:
            - string
            - "null"
          description: Zusätzliche Namenszeile des Kunden, wird auf Dokumenten unter
            `name` gedruckt.
          example: ACME Corp
        website:
          type:
            - string
            - "null"
          description: Website-URL des Kunden.
          example: www.acme-corp.com
        email:
          type:
            - string
            - "null"
          description: Allgemeine Kontakt-E-Mail-Adresse des Kunden.
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Kunden.
          example: +49 30 12345678
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Kunden.
          example: +1-555-0124
        currency:
          type:
            - string
            - "null"
          description: ISO-Währungscode für Angebote und Rechnungen dieses Kunden.
          example: EUR
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Notizen zum Kunden.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        industry:
          type:
            - string
            - "null"
          description: Name der Branche, der dieser Kunde angehört.
          example: Technologie
        vat:
          type:
            - string
            - "null"
          description: Umsatzsteuersatz des Kunden in Prozent.
        tax_number:
          type:
            - string
            - "null"
          description: Umsatzsteuer-Identifikationsnummer des Kunden — nicht der
            Steuersatz, siehe `vat`.
          example: DE123456789
        iban:
          type:
            - string
            - "null"
          description: IBAN des Kunden, wird für das SEPA-Lastschriftverfahren verwendet.
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC des Kunden, wird zusammen mit `iban` für das
            SEPA-Lastschriftverfahren verwendet.
          example: COBADEFFXXX
        payment_target:
          type:
            - string
            - "null"
          description: Anzahl der Tage, die der Kunde zur Zahlung einer Rechnung hat,
            gerechnet ab Rechnungsdatum.
        payment_target_discount:
          type:
            - integer
            - "null"
          description: Anzahl der Tage, innerhalb derer dem Kunden bei Zahlung ein Skonto
            gewährt wird.
          example: 2
        inactive:
          type: boolean
          description: Ob der Kunde inaktiv ist und in Listen aktiver Kunden ausgeblendet
            wird.
          example: false
        status:
          type: object
          description: >-
            Veralteter Alias von `inactive`, aus Gründen der
            Rückwärtskompatibilität beibehalten. Lesen Sie stattdessen

            `inactive`. `label` wird in die Sprache des Mandanten übersetzt
            ausgeliefert und darf nicht

            ausgewertet werden — vergleichen Sie stattdessen `value`.
            Abgekündigt seit 2025-10-28. Verwenden Sie stattdessen `inactive`.
            Kann ab dem 2027-08-31 entfernt werden. Ab API v2 nicht mehr
            enthalten.
          deprecated: true
          x-sunset: 2027-08-31
          properties:
            value:
              type: integer
              description: 1, wenn der Kunde aktiv ist, 0, wenn inaktiv — das Gegenteil von
                `inactive`.
              enum:
                - 0
                - 1
            label:
              type: string
              description: Der Status als übersetzte, menschenlesbare Zeichenkette. Nicht
                parsen, sondern stattdessen `value` vergleichen.
              enum:
                - Inactive
                - Active
          required:
            - value
            - label
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitpunkt, zu dem der Kundendatensatz angelegt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitpunkt, zu dem der Kundendatensatz zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
        billing_procedure:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per Standardrechnung oder im Gutschriftverfahren
            (Self-Billing) abgerechnet wird.
          example: true
        automated_invoicing:
          type:
            - boolean
            - "null"
          description: Ob Rechnungen für diesen Kunden automatisch erzeugt statt manuell
            erstellt werden.
          example: true
        debit_payment:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per SEPA-Lastschrift statt per Überweisung zahlt.
          example: false
        department_id:
          type: integer
          description: ID der Abteilung, der dieser Kunde zugeordnet ist.
          example: 1
        addresses:
          type: array
          description: >-
            Die Adressen des Kunden. Enthalten bei GET /customers/{customer},
            POST /customers und

            PUT /customers/{customer}; nicht enthalten bei GET /customers (dem
            Listen-Endpunkt).
          items:
            $ref: "#/components/schemas/CustomerAddress"
        managers:
          type: array
          description: >-
            Die für diesen Kunden verantwortlichen Mitarbeiter. Enthalten bei
            GET /customers/{customer},

            POST /customers und PUT /customers/{customer}; nicht enthalten bei
            GET /customers.
          items:
            $ref: "#/components/schemas/CustomerEmployee"
        categories:
          type: array
          description: >-
            Die diesem Kunden zugeordneten Kategorien. Enthalten bei allen vier
            Kunden-Endpunkten

            (GET /customers, GET /customers/{customer}, POST /customers, PUT
            /customers/{customer}).
          items:
            $ref: "#/components/schemas/Category"
        dynamicAttributes:
          type: array
          description: >-
            Die benutzerdefinierten dynamischen Attribute des Kunden. Enthalten
            bei allen vier Kunden-Endpunkten

            (GET /customers, GET /customers/{customer}, POST /customers, PUT
            /customers/{customer}).
          items:
            $ref: "#/components/schemas/DynamicAttribute"
        addresses_count:
          type: integer
          description: Anzahl der Adressen dieses Kunden. Nur enthalten bei GET /customers
            (dem Listen-Endpunkt).
          example: 2
        managers_count:
          type: integer
          description: Anzahl der für diesen Kunden verantwortlichen Mitarbeiter. Nur
            enthalten bei GET /customers.
          example: 1
        categories_count:
          type: integer
          description: Anzahl der diesem Kunden zugeordneten Kategorien. Nur enthalten bei
            GET /customers.
          example: 0
        dynamicAttributes_count:
          type: integer
          description: Anzahl der bei diesem Kunden gesetzten benutzerdefinierten
            dynamischen Attribute. Nur enthalten bei GET /customers.
          example: 0
        contacts_count:
          type: integer
          description: Anzahl der Ansprechpartner dieses Kunden. Nur enthalten bei GET
            /customers.
          example: 3
        priceTables:
          type: array
          description: >-
            Die Preistabellen des Kunden — die eigenen, falls zugewiesen,
            andernfalls die Basis-Preistabellen.

            Enthalten bei GET /customers/{customer}, POST /customers und

            PUT /customers/{customer}; nicht enthalten bei GET /customers (dem
            Listen-Endpunkt). Es

            gibt keinen clientseitigen Parameter, um sie anzufordern oder zu
            unterdrücken.
          items:
            $ref: "#/components/schemas/PriceTable"
      required:
        - customer_number
        - name
        - additional_name
        - website
        - email
        - phone
        - fax
        - currency
        - comments
        - industry
        - vat
        - tax_number
        - iban
        - bic
        - payment_target
        - payment_target_discount
        - inactive
        - status
        - created
        - modified
        - billing_procedure
        - automated_invoicing
        - debit_payment
        - department_id
      title: CustomerResource
    DefaultBillability:
      type: integer
      description: >
        Default billability applied to new time entries, and whether the user
        may override it.
      enum:
        - 1
        - 2
        - 3
        - 4
      title: DefaultBillability
    DepartmentManager:
      type: object
      properties:
        username:
          type: string
          description: Eindeutiger Anmeldename des Abteilungsleiters.
          example: max.mustermann
        firstname:
          type: string
          description: Vorname des Abteilungsleiters.
          example: Max
        lastname:
          type: string
          description: Nachname des Abteilungsleiters.
          example: Mustermann
        personal_number:
          type:
            - string
            - "null"
          description: Personalnummer des Abteilungsleiters.
          example: "1"
        email:
          type:
            - string
            - "null"
          description: Geschäftliche E-Mail-Adresse des Abteilungsleiters.
          example: erika.mustermann@acme-corp.de
      required:
        - username
        - firstname
        - lastname
        - personal_number
        - email
      title: DepartmentManagerResource
    Department:
      type: object
      properties:
        id:
          description: Eindeutige ID der Abteilung.
        parent_id:
          type:
            - integer
            - "null"
          description: ID der übergeordneten Abteilung, falls diese Abteilung einer
            anderen untergeordnet ist.
          example: 1
        name:
          type: string
          description: Anzeigename der Abteilung.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Zwecks oder Aufgabenbereichs der Abteilung.
          example: Angebot|en:offer
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Kommentare zur Abteilung.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        status:
          type:
            - boolean
            - "null"
          description: Ob die Abteilung derzeit aktiv ist.
          example: true
        manager:
          type: array
          description: Der Mitarbeiter, der derzeit als Leiter dieser Abteilung zugewiesen
            ist.
          items:
            $ref: "#/components/schemas/DepartmentManager"
        children:
          type: array
          description: Die dieser Abteilung direkt untergeordneten Abteilungen.
          items:
            $ref: "#/components/schemas/Department"
        manager_count:
          type: integer
          description: Ob derzeit ein Abteilungsleiter zugewiesen ist.
          example: 2
        children_count:
          type: integer
          description: Anzahl der dieser Abteilung direkt untergeordneten Abteilungen.
          example: 10
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem die Abteilung angelegt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem die Abteilung zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - parent_id
        - name
        - description
        - comments
        - status
        - created
        - modified
      title: DepartmentResource
    DeviceEmployee:
      type: object
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, der das Erfassungsgerät verwenden
            darf.
          example: max.mustermann
      required:
        - employee_id
      title: DeviceEmployeeResource
    Device:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige ID des Erfassungsgeräts.
          example: 1
        type:
          type:
            - integer
            - "null"
          description: Art des Terminals (z. B. ein physisches Zeiterfassungsterminal oder
            eine mobile App).
          example: 1
        status:
          type:
            - integer
            - "null"
          description: Ob das Erfassungsgerät derzeit aktiv ist.
          example: 1
        name:
          type: string
          description: Anzeigename des Erfassungsgeräts.
          example: EU
        password:
          type:
            - string
            - "null"
          description: Passwort zur Authentifizierung dieses Erfassungsgeräts, falls
            konfiguriert.
          example: "1234"
        min_time:
          type:
            - string
            - "null"
          description: Früheste Tageszeit, zu der über dieses Erfassungsgerät
            Projektzeiten gebucht werden dürfen.
        max_time:
          type:
            - string
            - "null"
          description: Späteste Tageszeit, zu der über dieses Erfassungsgerät
            Projektzeiten gebucht werden dürfen.
        track:
          type:
            - integer
            - "null"
          description: Ob Buchungen über dieses Erfassungsgerät separat nachverfolgt
            werden sollen.
          example: 0
        display_config:
          type:
            - integer
            - "null"
          description: Anzeigekonfiguration, die auf dem Erfassungsgerät selbst angewendet
            wird.
          example: 1
        employees:
          type: array
          description: Mitarbeiter, die dieses Erfassungsgerät derzeit verwenden dürfen.
          items:
            $ref: "#/components/schemas/DeviceEmployee"
        categories:
          type: array
          description: Kategorien, denen dieses Erfassungsgerät zugeordnet ist.
          items:
            $ref: "#/components/schemas/Category"
        employees_count:
          type: integer
          description: Anzahl der Mitarbeiter, die dieses Erfassungsgerät derzeit
            verwenden dürfen.
          example: 0
        categories_count:
          type: integer
          description: Anzahl der Kategorien, denen dieses Erfassungsgerät zugeordnet ist.
          example: 0
      required:
        - id
        - type
        - status
        - name
        - password
        - min_time
        - max_time
        - track
        - display_config
      title: DeviceResource
    DocumentFolder:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige ID des Ordners.
          example: 1
        folder_name:
          type: string
          description: Anzeigename des Ordners.
          example: Interne Dokumente
        parent_id:
          type:
            - integer
            - "null"
          description: ID des übergeordneten Ordners oder null für einen Ordner auf der
            obersten Ebene.
          example: 1
        type:
          type:
            - object
            - "null"
          description: Wofür der Ordner verwendet wird, z. B. Dokumente eines Projekts
            oder eines Kunden.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Allgemein
                - Projekt
                - Kunde
                - Ticket
                - Abrechnung
                - Mitarbeiter/in
                - Invoice Attachments
                - Angebot
                - Offer Attachments
          required:
            - id
            - name
        project_id:
          type: integer
          description: ID des Projekts, zu dem dieser Ordner gehört. Nur enthalten, wenn
            der Ordner zu einem Projekt gehört.
          example: 16
        customer_number:
          type:
            - string
            - "null"
          description: Nummer des Kunden, zu dem dieser Ordner gehört. Nur enthalten, wenn
            der Ordner zu einem Kunden gehört.
          example: K-12345
        employee_username:
          type:
            - string
            - "null"
          description: Benutzername des Mitarbeiters, zu dem dieser Ordner gehört. Nur
            enthalten, wenn der Ordner zu einem Mitarbeiter gehört.
        invoice_number:
          type:
            - string
            - "null"
          description: Nummer der Rechnung, zu der dieser Ordner gehört. Nur enthalten,
            wenn der Ordner zu einer Rechnung gehört.
          example: "20240001"
        offer_id:
          type:
            - integer
            - "null"
          description: ID des Angebots, zu dem dieser Ordner gehört. Nur enthalten, wenn
            der Ordner zu einem Angebot gehört.
          example: 1
        subfolders:
          type: array
          description: Untergeordnete Unterordner dieses Ordners. Nur gefüllt, wenn die
            Unterordner-Relation geladen wurde, andernfalls leer.
          items:
            type: string
          minItems: 0
          maxItems: 0
          additionalItems: false
      required:
        - id
        - folder_name
        - parent_id
        - type
        - subfolders
      title: DocumentFolderResource
    Document:
      anyOf:
        - type: object
          properties:
            id:
              type: integer
              description: Unique identifier of the document.
            filename:
              type: string
              description: The file's original name, as it was uploaded.
            file_type:
              type:
                - string
                - "null"
              description: MIME type of the stored file.
            file_contents:
              type:
                - string
                - "null"
              description: Base64-encoded content of the current document version; null when
                the version has no stored file.
          required:
            - id
            - filename
            - file_type
            - file_contents
        - type: array
          items:
            type: string
          minItems: 0
          maxItems: 0
          additionalItems: false
      title: DocumentResource
    DynamicAttributeDefinition:
      type: object
      properties:
        id:
          type: string
          description: Eindeutige ID der Attributdefinition.
        name:
          type: string
          description: Bezeichnung dieses Attributs, wird überall angezeigt, wo es
            eingegeben oder dargestellt wird.
          example: EU
        description:
          type:
            - object
            - "null"
          description: Erläuterung, was dieses Attribut erfasst; wird als Hilfetext neben
            dem Feld angezeigt.
          properties:
            de:
              type:
                - string
                - "null"
            en:
              type: string
            fr:
              type: string
            es:
              type: string
            pl:
              type: string
        note:
          type:
            - string
            - "null"
          description: Interne Notiz zu dieser Definition, wird der Person, die den Wert
            eingibt, nicht angezeigt.
          example: Familienurlaub
        placeholder:
          type:
            - string
            - "null"
          description: Platzhaltertext, der im leeren Eingabefeld dieses Attributs
            angezeigt wird.
        position:
          type: integer
          description: Sortierposition dieser Definition unter den anderen Attributen
            derselben Art.
          example: 1
        is_active:
          type: boolean
          description: Ob diese Definition derzeit aktiv ist und zur Verwendung angeboten
            wird.
          example: true
        constraints:
          type:
            - object
            - "null"
          description: Validierungsregeln für einen für dieses Attribut eingegebenen Wert,
            z. B. Pflichtfeld oder ein numerischer Wertebereich.
        type:
          type:
            - object
            - "null"
          description: Datentyp des Attributwerts, z. B. Text, Zahl, Datum oder Optionen.
          additionalProperties: {}
        kind:
          type:
            - object
            - "null"
          description: Art der Entität, der dieses Attribut zugeordnet werden kann, z. B.
            Mitarbeiter, Projekt oder Kunde.
          additionalProperties: {}
        options:
          type:
            - object
            - "null"
          description: Die auswählbaren Optionswerte. Nur enthalten bei Definitionen vom
            Typ OPTIONS.
      required:
        - id
        - name
        - description
        - note
        - placeholder
        - position
        - is_active
        - constraints
        - type
        - kind
      title: DynamicAttributeDefinitionResource
    DynamicAttribute:
      type: object
      properties:
        name:
          type: string
          description: Name der Definition des dynamischen Attributs, für die dieser Wert
            eingegeben wurde.
          example: EU
        value:
          description: Der gespeicherte Wert; seine Form hängt vom benachbarten Feld
            `type` ab (eine Zeichenkette, eine Zahl, ein Boolean, ein Datum,
            eine Mitarbeiterreferenz oder eine Liste von Optionswerten).
          example: Max Mustermann (Bruder)
        type:
          type: string
          description: Datentyp dieses Attributs, z. B. Text, Zahl, Datum oder Optionen;
            bestimmt, wie `value` zu interpretieren ist.
          enum:
            - Text
            - Integer
            - Float
            - URL
            - E-Mail
            - Datum
            - Uhrzeit
            - Datetime
            - Boolean
            - Betrag
            - Optionen
            - Prozent
            - Time period
            - Textarea
            - Users
            - Upload
        description:
          type:
            - object
            - "null"
          description: Erläuterung, was dieses Attribut erfasst, wie in seiner Definition
            konfiguriert.
          properties:
            de:
              type:
                - string
                - "null"
            en:
              type: string
            fr:
              type: string
            es:
              type: string
            pl:
              type: string
      required:
        - name
        - value
        - type
        - description
      title: DynamicAttributeResource
    Employee:
      type: object
      properties:
        username:
          type: string
          description: Eindeutiger Anmeldename des Mitarbeiters, wird auch als seine
            Kennung in der API verwendet.
          example: max.mustermann
        firstname:
          type: string
          description: Vorname des Mitarbeiters.
          example: Max
        lastname:
          type: string
          description: Nachname des Mitarbeiters.
          example: Mustermann
        personal_number:
          type:
            - string
            - "null"
          description: Personalnummer des Mitarbeiters, wie auf der Gehaltsabrechnung
            angegeben.
          example: "1"
        street:
          type:
            - string
            - "null"
          description: Straße und Hausnummer der Adresse des Mitarbeiters.
          example: Musterstraße 30
        zip:
          type:
            - string
            - "null"
          description: Postleitzahl der Adresse des Mitarbeiters.
          example: "71254"
        city:
          type:
            - string
            - "null"
          description: Ort der Adresse des Mitarbeiters.
          example: Berlin
        country:
          type:
            - string
            - "null"
          description: Land der Adresse des Mitarbeiters.
          example: Deutschland
        abbreviation:
          type:
            - string
            - "null"
          description: Kurzzeichen zur Identifikation des Mitarbeiters in kompakten
            Ansichten und Berichten.
          example: MM
        salutation:
          type:
            - object
            - "null"
          description: Anrede (Herr, Frau, ...), die bei der Ansprache des Mitarbeiters
            verwendet wird.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Herr
                - Frau
                - ""
          required:
            - id
            - name
        title:
          type:
            - string
            - "null"
          description: Akademischer oder beruflicher Titel, sofern vorhanden.
          example: Dr.
        email:
          type:
            - string
            - "null"
          description: Geschäftliche E-Mail-Adresse, unter der der Mitarbeiter erreichbar
            ist und eingeladen wird.
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Geschäftliche Festnetznummer.
          example: +49 30 12345678
        mobile:
          type:
            - string
            - "null"
          description: Geschäftliche Mobilnummer.
          example: +49 170 1234567
        fax:
          type:
            - string
            - "null"
          description: Geschäftliche Faxnummer.
          example: +1-555-0124
        private_phone:
          type:
            - string
            - "null"
          description: Private Telefonnummer, getrennt von der geschäftlichen
            Telefonnummer geführt.
          example: 07156 33958
        birthdate:
          type:
            - string
            - "null"
          format: date-time
          description: Geburtsdatum des Mitarbeiters.
          example: 1985-08-17T00:00:00.000000Z
        iban:
          type:
            - string
            - "null"
          description: IBAN (International Bank Account Number) für Erstattungen und
            Gehaltszahlungen.
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC (Bank Identifier Code) der Bank des Mitarbeiters.
          example: COBADEFFXXX
        account_no:
          type:
            - string
            - "null"
          description: Kontonummer, wird verwendet, wenn keine IBAN verfügbar ist.
        bank_name:
          type:
            - string
            - "null"
          description: Name der Bank des Mitarbeiters.
        bank_code:
          type:
            - string
            - "null"
          description: Bankleitzahl der Bank des Mitarbeiters.
        currency:
          type:
            - string
            - "null"
          description: Währung, in der die Stundensätze und Erstattungen des Mitarbeiters
            angegeben sind.
          example: EUR
        approval_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem die Daten/der Vertrag des Mitarbeiters genehmigt
            wurden.
        vat:
          type:
            - number
            - "null"
          description: Umsatzsteuersatz, der auf die abgerechneten Stundensätze des
            Mitarbeiters angewendet wird.
          example: 1.5
        price_group:
          type: string
          description: Preisgruppe, aus der die Abrechnungssätze des Mitarbeiters
            abgeleitet werden.
          example: Junior-Entwickler
        employment:
          type:
            - object
            - "null"
          description: Art der Beschäftigung (festangestellt, freiberuflich, ...).
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Mitarbeiter/in
                - Freier Mitarbeiter
                - Freier Mitarbeiter mit Gutschrift
          required:
            - id
            - name
        rights:
          type: object
          description: Rechtestufe, die dem Mitarbeiter in der Anwendung gewährt wird.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - User
                - Administrator
                - Controller
                - User with additional authorizations
                - Projektcontroller
                - Kundenansprechpartner
                - System-Administrator
          required:
            - id
            - name
        department_id:
          type: integer
          description: Kennung der Abteilung, der der Mitarbeiter derzeit angehört.
          example: 1
        language:
          type:
            - object
            - "null"
          description: Sprache, in der Oberfläche und Kommunikation für den Mitarbeiter
            angezeigt werden.
          properties:
            locale:
              type: string
            isoCode:
              type: string
              enum:
                - de
                - en
                - fr
                - es
                - pl
                - sk
                - tr
            name:
              type: string
              enum:
                - deutsch
                - German (Austria)
                - German (Switzerland)
                - englisch
                - English (German Format)
                - English (Europe)
                - English (Great Britain)
                - English (USA)
                - französisch
                - French (Switzerland)
                - French (German Format)
                - Spanisch
                - Polnisch
                - Slovak
                - Turkish
            dateFormat:
              type: string
              enum:
                - d.m.Y
                - d/m/Y
                - m/d/Y
            dateTimeFormat:
              type: string
              enum:
                - d.m.Y H:i
                - d/m/Y H:i
                - m/d/Y H:i
            numberFormat:
              anyOf:
                - type: object
                  properties:
                    decimalSeparator:
                      type: string
                      const: ","
                    thousandsSeparator:
                      type: string
                      const: .
                  required:
                    - decimalSeparator
                    - thousandsSeparator
                - type: object
                  properties:
                    decimalSeparator:
                      type: string
                      const: .
                    thousandsSeparator:
                      type: string
                      const: ","
                  required:
                    - decimalSeparator
                    - thousandsSeparator
                - type: object
                  properties:
                    decimalSeparator:
                      type: string
                      const: ","
                    thousandsSeparator:
                      type: string
                      const: " "
                  required:
                    - decimalSeparator
                    - thousandsSeparator
                - type: object
                  properties:
                    decimalSeparator:
                      type: string
                      const: .
                    thousandsSeparator:
                      type: string
                      const: "'"
                  required:
                    - decimalSeparator
                    - thousandsSeparator
          required:
            - locale
            - isoCode
            - name
            - dateFormat
            - dateTimeFormat
            - numberFormat
        personio_id:
          type:
            - string
            - "null"
          description: Kennung des Mitarbeiters im angebundenen Personio-HR-System, sofern
            verknüpft.
        cost_bearer:
          type:
            - string
            - "null"
          description: Kostenstelle, auf die Zeiten und Auslagen des Mitarbeiters gebucht
            werden.
        tax_id:
          type:
            - string
            - "null"
          description: Steueridentifikationsnummer des Mitarbeiters.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung des Mitarbeiterdatensatzes.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung des Mitarbeiterdatensatzes.
          example: 2024-07-20T12:30:00.000000Z
        creditor_number:
          type:
            - string
            - "null"
          description: Kreditorennummer, die bei der Erstattung an den Mitarbeiter über
            die Buchhaltung verwendet wird.
          example: "80033"
        categories:
          type: array
          description: Kategorien, denen der Mitarbeiter zugeordnet ist.
          items:
            $ref: "#/components/schemas/Category"
        dynamicAttributes:
          type: array
          description: Für diesen Mandanten konfigurierte dynamische Attribute, die bei
            diesem Mitarbeiter gesetzt sind.
          items:
            $ref: "#/components/schemas/DynamicAttribute"
        absences_count:
          type: integer
          description: Anzahl der für diesen Mitarbeiter erfassten Fehlzeiten.
          example: 1
        regularWorkingTimes_count:
          type: integer
          description: Anzahl der für diesen Mitarbeiter erfassten Regelarbeitszeiten.
          example: 1
        employmentPeriods_count:
          type: integer
          description: Anzahl der für diesen Mitarbeiter erfassten Beschäftigungszeiträume.
          example: 1
        internalRates_count:
          type: integer
          description: Anzahl der für diesen Mitarbeiter erfassten internen Stundensätze.
          example: 1
      required:
        - username
        - firstname
        - lastname
        - personal_number
        - street
        - zip
        - city
        - country
        - abbreviation
        - salutation
        - title
        - email
        - phone
        - mobile
        - fax
        - private_phone
        - birthdate
        - iban
        - bic
        - account_no
        - bank_name
        - bank_code
        - currency
        - approval_date
        - vat
        - price_group
        - employment
        - rights
        - department_id
        - language
        - personio_id
        - cost_bearer
        - tax_id
        - created
        - modified
        - creditor_number
      title: EmployeeResource
    EmployeeRights:
      type: integer
      description: >
        Access-rights level a user account can hold in the application (user,
        admin, controller, ...).
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 11
      title: EmployeeRights
    EmploymentPeriod:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Beschäftigungszeitraums.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, zu dem dieser Beschäftigungszeitraum
            gehört.
          example: max.mustermann
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Erster Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt war.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Letzter Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt war, sofern beendet.
          example: 2024-01-16T00:00:00.000000Z
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zum Beschäftigungszeitraum.
          example: Familienurlaub
        beginning_of_year:
          type:
            - string
            - "null"
          format: date-time
          description: Kalendertag, an dem das Urlaubsjahr für diesen
            Beschäftigungszeitraum beginnt.
          example: 2024-01-01T00:00:00.000000Z
        annual_leave_entitlement:
          type:
            - number
            - "null"
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter pro vollem
            Urlaubsjahr Anspruch hat.
          example: 30
        period_holiday_entitlement:
          type:
            - number
            - "null"
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter Anspruch hat,
            anteilig für diesen Zeitraum.
          example: 30
        is_holiday_per_year:
          type:
            - boolean
            - "null"
          description: >-
            Ob der Urlaubsanspruch pro Kalenderjahr und nicht pro
            Beschäftigungszeitraum

            angegeben ist.
          example: true
        day_absent_in_hours:
          type:
            - number
            - "null"
          description: Anzahl der Stunden, mit denen ein ganzer Fehltag für diesen
            Beschäftigungszeitraum gebucht wird.
          example: 8
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung des Beschäftigungszeitraums.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung des Beschäftigungszeitraums.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - employee_id
        - start_date
        - end_date
        - note
        - beginning_of_year
        - annual_leave_entitlement
        - period_holiday_entitlement
        - is_holiday_per_year
        - day_absent_in_hours
        - created
        - modified
      title: EmploymentPeriodResource
    EmploymentType:
      type: integer
      description: >
        Type of employment (permanent employee, freelancer, or freelancer paid
        via credit note).
      enum:
        - 0
        - 1
        - 2
      title: EmploymentType
    HolidayCalendar:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Feiertagskalenders.
          example: 1
        name:
          type: string
          description: Kurzbezeichnung des Feiertagskalenders.
          example: EU
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zum Feiertagskalender.
          example: Familienurlaub
        country:
          type:
            - string
            - "null"
          description: Land, dessen gesetzliche Feiertage dieser Kalender abdeckt.
          example: Deutschland
        region:
          type:
            - string
            - "null"
          description: Region oder Bundesland innerhalb des Landes, das dieser Kalender
            abdeckt, sofern eingeschränkt.
          example: East Tabitha
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung des Feiertagskalenders.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung des Feiertagskalenders.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - name
        - note
        - country
        - region
        - created
        - modified
      title: HolidayCalendarResource
    InternalRate:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des internen Stundensatzes.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den dieser interne Stundensatz
            gilt.
          example: max.mustermann
        start_date:
          type: string
          format: date-time
          description: Kalendertag, ab dem dieser interne Stundensatz gilt.
          example: 2024-01-15T00:00:00.000000Z
        internal_rate:
          type:
            - number
            - "null"
          description: Interner (Kosten-)Satz, der für die Zeit des Mitarbeiters angesetzt
            wird.
          example: 1.5
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zum internen Stundensatz.
          example: Familienurlaub
        monthly_rate:
          type:
            - number
            - "null"
          description: Fester Monatssatz, der anstelle des Stundensatzes verwendet wird,
            sofern zutreffend.
          example: 1.5
        internal_rate_resets:
          type:
            - number
            - "null"
          description: Intervall, in dem der interne Stundensatz zurückgesetzt wird (z. B.
            monatlich, jährlich).
          example: 1.5
        rate_type:
          type:
            - object
            - "null"
          description: Ob der Satz stündlich oder als fester Monatsbetrag angesetzt wird.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - hourly rate
                - daily rate
          required:
            - id
            - name
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der Erstellung des internen Stundensatzes.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel der letzten Änderung des internen Stundensatzes.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - id
        - employee_id
        - start_date
        - internal_rate
        - note
        - monthly_rate
        - internal_rate_resets
        - rate_type
        - created
        - modified
      title: InternalRateResource
    InvoiceAttachment:
      type: object
      properties:
        files:
          type: array
          description: >-
            Alle gespeicherten Dateien dieser Rechnung: das Rechnungsdokument
            selbst, vorhanden sobald eines

            existiert; die per E-Mail versendete Kopie (Art invoice_mail), nur
            vorhanden sobald eine versendet wurde;

            sowie alle manuell angehängten Dateien. Jeder Eintrag hat einen
            filename, einen file_type und

            file_contents — die Bytes der Datei, base64-kodiert.
          items: {}
      required:
        - files
      title: InvoiceAttachmentResource
    InvoiceItem:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Rechnungsposition.
          example: 1
        project_id:
          type:
            - integer
            - "null"
          description: Das Projekt, gegen das diese Position abgerechnet wird.
          example: 16
        customer_number:
          type:
            - string
            - "null"
          description: Der Kunde, zu dem das Projekt der Position gehört.
          example: K-12345
        from:
          type:
            - string
            - "null"
          format: date-time
          description: Beginn des Leistungszeitraums, den diese Position abdeckt.
        to:
          type:
            - string
            - "null"
          format: date-time
          description: Ende des Leistungszeitraums, den diese Position abdeckt.
        repetition:
          type:
            - integer
            - "null"
          description: Wie oft sich diese Position wiederholt, bei wiederkehrenden
            Positionen.
          example: 1
        quantity:
          type:
            - number
            - "null"
          description: Die abgerechnete Menge, in der Einheit der Position.
          example: 1.5
        unit_price:
          type:
            - number
            - "null"
          description: Der Preis pro Einheit, in der Währung der Position.
          example: 1.5
        unit:
          type:
            - string
            - "null"
          description: Die Einheit, in der Menge und Preis angegeben sind.
          example: Stunde
        currency:
          type:
            - string
            - "null"
          description: Der dreistellige Währungscode von unit_price und der abgeleiteten
            Beträge.
          example: EUR
        language:
          type:
            - string
            - "null"
          description: Die Sprache, in der der Rechnungstext verfasst ist.
          example: de
        status:
          type: object
          description: Der Bearbeitungsstatus der Position — geplant, freigegeben,
            abgerechnet oder storniert.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Geplante
                - genehmigt
                - Billed
                - Canceled
          required:
            - id
            - name
        kind:
          type: object
          description: Was diese Position abrechnet — Arbeitsstunden, Belege, eine
            Pauschale oder einen manuellen Eintrag.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Aufwand
                - Flat Rate
                - Project Task
                - Other Receipts
                - Travel Flat Rates
                - Ticket
                - Artikel
                - Cancellation Credit
                - Final Performance Level
                - Partial Payment on Performance Level
                - Partial Payment Percent
                - Final Payment Percent
                - Partial Payment Fixed Price
                - Final Payment Fixed Price
                - Partial Payment Costs
                - Partial Payment Costs VMA
                - Partial Payment Costs Receipts
                - Final Payment Costs
                - Final Payment Costs Receipts
                - Final Invoice Costs VMA
                - Prozent
                - Careforce Month End
          required:
            - id
            - name
        invoice_number:
          type:
            - string
            - "null"
          description: Die Rechnung, auf der diese Position abgerechnet wurde, sobald sie
            abgerechnet ist.
          example: "20240001"
        invoice_text:
          type:
            - string
            - "null"
          description: Der Text, der für diese Position auf der Rechnung gedruckt wird.
        sorting:
          type:
            - integer
            - "null"
          description: Die Reihenfolge der Position unter den übrigen Positionen der
            Rechnung.
          example: 1
        contains_working_hours:
          type:
            - boolean
            - "null"
          description: Ob diese Position erfasste Arbeitsstunden abrechnet.
          example: true
        contains_receipts:
          type:
            - boolean
            - "null"
          description: Ob diese Position erfasste Belege abrechnet.
          example: true
        contains_travel_expenses:
          type:
            - boolean
            - "null"
          description: Ob diese Position erfasste Reisekosten abrechnet.
          example: true
        planned_amount:
          type:
            - number
            - "null"
          description: Der prognostizierte Betrag dieser Position, solange sie nur geplant
            oder freigegeben ist.
          example: 1.5
        planned_date:
          type: string
          format: date-time
          description: Das geplante Rechnungsdatum, zu dem diese Position abgerechnet
            werden soll; die Listenfilter wirken auf dieses Feld, nicht auf
            from/to.
          example: 2024-05-31T00:00:00.000000Z
        billed_amount:
          type:
            - number
            - "null"
          description: Der abgerechnete Nettobetrag; 0, solange die Position nur geplant
            oder freigegeben und noch nicht storniert ist.
          example: 1.5
        billed_date:
          type:
            - string
            - "null"
          description: Das Datum der Rechnung, auf der diese Position tatsächlich
            abgerechnet wurde.
          example: 2024-05-31T00:00:00.000000Z
        vat:
          type:
            - number
            - "null"
          description: Der auf diese Position angewendete Mehrwertsteuersatz in Prozent.
          example: 1.5
        project_task_id:
          type:
            - integer
            - "null"
          description: Der Vorgang, gegen den diese Position abgerechnet wird, sofern das
            Projekt Vorgänge verwendet.
          example: 1
        ticket_id:
          type:
            - integer
            - "null"
          description: Das Ticket, gegen das diese Position abgerechnet wird, sofern sie
            aus einem Ticket stammt.
          example: 1234
        article_id:
          type:
            - integer
            - "null"
          description: Der Artikel, den diese Position abrechnet, sofern sie aus dem
            Artikelkatalog erstellt wurde.
          example: 1
        revenueAccounts:
          type: array
          description: Die Buchhaltungskonten, auf die der Umsatz dieser Position
            aufgeteilt wird; nur vorhanden, wenn Erlöskonten geführt werden.
          items:
            type: object
            properties:
              vat:
                type: string
                description: Der Mehrwertsteuersatz in Prozent, für den dieser
                  Buchhaltungseintrag gilt.
              revenue_account:
                type: string
                description: Das Buchhaltungskonto, auf das der Umsatz zu diesem Satz gebucht
                  wird.
            required:
              - vat
              - revenue_account
        sales_manager:
          type: string
          description: >-
            Der Mitarbeiter, der die Umsatzverantwortung für diese Position
            trägt.

            Nur in Instanzen mit der Erweiterung MOD_HHPBERLIN. Keine allgemein
            verfügbare Funktion.
      required:
        - id
        - project_id
        - customer_number
        - from
        - to
        - repetition
        - quantity
        - unit_price
        - unit
        - currency
        - language
        - status
        - kind
        - invoice_number
        - invoice_text
        - sorting
        - contains_working_hours
        - contains_receipts
        - contains_travel_expenses
        - planned_amount
        - planned_date
        - billed_amount
        - billed_date
        - vat
        - project_task_id
        - ticket_id
        - article_id
        - revenueAccounts
      title: InvoiceItemResource
    Invoice:
      type: object
      properties:
        invoice_number:
          type: string
          description: Die Rechnungsnummer, eindeutig pro Rechnung und je Mandant
            formatiert.
          example: "20240001"
        billing_kind:
          type: object
          description: Wie die Rechnung ihre Positionen gruppiert — nach Projekt, nach
            Tätigkeit oder als manuelle Auswahl.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Abrechnung
                - Credit Memo
          required:
            - id
            - name
        date:
          type: string
          description: Das Datum, an dem die Rechnung ausgestellt wurde.
          example: 2024-07-20T00:00:00.000000Z
        amount:
          type: number
          description: Die Rechnungssumme inklusive Steuer (der Bruttobetrag).
          example: 1.5
        status:
          type: object
          description: Der Bearbeitungsstatus der Rechnung — geplant, freigegeben,
            abgerechnet oder storniert.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Billed
                - Canceled
                - In Correction
          required:
            - id
            - name
        currency:
          type: string
          description: Der dreistellige Währungscode, in dem der Rechnungsbetrag angegeben
            ist.
          example: EUR
        correction_date:
          type: string
          description: Das Datum, an dem eine korrigierende Gutschrift ausgestellt wurde;
            nur vorhanden, sobald diese Rechnung korrigiert wurde.
        payment_terms_date:
          type: string
          description: Das Fälligkeitsdatum der Zahlung, berechnet aus payment_terms.
          example: 2024-06-01
        payment_terms:
          type: integer
          description: Die Anzahl der Tage nach dem Rechnungsdatum, innerhalb derer die
            Zahlung fällig ist.
          example: 30
        address:
          type: string
          description: Die auf der Rechnung gedruckte Rechnungsadresse.
          example: Musterstraße 123
        email_sent_at:
          type: string
          description: Der Zeitstempel, zu dem die Rechnung per E-Mail an den Kunden
            gesendet wurde; nur vorhanden, sobald sie versendet wurde.
        email_recipient:
          type: string
          description: Die E-Mail-Adresse, an die die Rechnung gesendet wurde; nur
            vorhanden, sobald eine E-Mail versendet wurde.
        customer_number:
          type: string
          description: Der Kunde, dem diese Rechnung gestellt wurde.
          example: K-12345
        title:
          type: string
          description: Die Titelzeile der Rechnung, gedruckt über ihren Positionen.
          example: Dr.
        type:
          type:
            - object
            - "null"
          description: Wie sich diese Rechnung auf eine andere bezieht — als Korrektur
            oder als Stornogutschrift; nur vorhanden, wenn es sich um eine
            solche handelt.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Payment Request
                - Final Invoice
                - Partial Final Invoice
          required:
            - id
            - name
        note:
          type: string
          description: Eine interne Notiz zur Rechnung, die nicht auf dem Dokument
            gedruckt wird.
          example: Familienurlaub
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Rechnungsdatensatz erstmals erstellt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Rechnungsdatensatz zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - invoice_number
        - billing_kind
        - date
        - amount
        - status
        - currency
        - correction_date
        - payment_terms_date
        - payment_terms
        - address
        - email_sent_at
        - email_recipient
        - customer_number
        - title
        - type
        - note
        - created
        - modified
      title: InvoiceResource
    Json:
      type: string
      title: JsonResource
    Language:
      type: string
      description: >
        Language and regional format used for documents generated for the
        project, e.g. date and number formatting.
      enum:
        - de
        - de_at
        - de_ch
        - en
        - en_de
        - en_eu
        - en_gb
        - en_us
        - es
        - fr
        - fr_ch
        - fr_de
        - pl
        - sk
        - tr
      title: Language
    LeaveApprovalApplication:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Urlaubsantrags.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, der den Urlaub beantragt hat.
          example: max.mustermann
        requested_at:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem der Urlaubsantrag eingereicht wurde.
          example: 2024-01-10 13:04:34
        number_of_days:
          type: number
          description: Anzahl der Tage, die der beantragte Urlaub umfasst.
          example: 1.5
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Erster Kalendertag des beantragten Urlaubs.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          description: Letzter Kalendertag des beantragten Urlaubs.
          example: 2024-01-16T00:00:00.000000Z
        note:
          type: string
          description: Freitextnotiz zum Urlaubsantrag.
          example: Familienurlaub
        status:
          type: object
          description: Aktueller Genehmigungsstatus des Urlaubsantrags (z. B. offen,
            genehmigt, abgelehnt).
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Requested
                - genehmigt
                - abgelehnt
                - zurückgezogen
                - Geplante
          required:
            - id
            - name
        recipient:
          type: string
          description: Hauptempfänger, an den die Genehmigungsanfrage gesendet wurde.
          example: vorgesetzter@beispiel.de
        recipient_cc:
          type: string
          description: Weitere Empfänger, die die Genehmigungsanfrage in Kopie erhalten
            haben.
          example: personal@beispiel.de
        recipient_bcc:
          type: string
          description: Weitere Empfänger, die die Genehmigungsanfrage in Blindkopie
            erhalten haben.
        status_edited_since:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, seit dem der aktuelle Status gilt.
          example: 2024-01-11 10:30:00
        status_edited_by:
          type: string
          description: Benutzername der Person, die den Genehmigungsstatus zuletzt
            geändert hat.
          example: vorgesetzter.nutzer
        status_note:
          type: string
          description: Freitextnotiz, die bei der letzten Änderung des Genehmigungsstatus
            hinterlassen wurde.
          example: Genehmigt - Schönen Urlaub!
        absence_text:
          type: string
          description: Aufbereiteter Text, der die beantragte Fehlzeit zusammenfasst, wie
            er Genehmigenden angezeigt wird.
          example: Urlaubsantrag für Familienausflug
      required:
        - id
        - employee_id
        - requested_at
        - number_of_days
        - start_date
        - end_date
        - note
        - status
        - recipient
        - recipient_cc
        - recipient_bcc
        - status_edited_since
        - status_edited_by
        - status_note
        - absence_text
      title: LeaveApprovalApplicationResource
    LocationList:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Ortsliste.
          example: 1
        startdate:
          type: string
          description: Datum, ab dem die Ortsliste gilt.
        enddate:
          type:
            - string
            - "null"
          description: Datum, bis zu dem die Ortsliste gilt.
        comments:
          type:
            - string
            - "null"
          description: Freitextkommentare zur Ortsliste.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        meal_allowance:
          type: object
          description: "Welche Verpflegungsmehraufwandsregelung für Einsatzorte dieser
            Liste gilt: keine, Deutschland, Österreich oder Österreich (24h)."
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - no meal allowance
                - meal allowance germany
                - meal allowance austria
                - meal allowance austria 24 hours
          required:
            - id
            - name
        locations:
          type: array
          description: Einsatzorte, die zu dieser Ortsliste gehören.
          items:
            $ref: "#/components/schemas/Location"
      required:
        - id
        - startdate
        - enddate
        - comments
        - meal_allowance
        - locations
      title: LocationListResource
    Location:
      type: object
      properties:
        name:
          type: string
          description: Name des Einsatzorts.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitextbeschreibung des Einsatzorts.
          example: Angebot|en:offer
        location_list_id:
          type: integer
          description: Kennung der Ortsliste, zu der dieser Einsatzort gehört.
          example: 1
        daily_rate_workday:
          type:
            - number
            - "null"
          description: Tagessatz für einen regulären Arbeitstag an diesem Einsatzort.
          example: 1.5
        daily_rate_workday_taxed:
          type:
            - number
            - "null"
          description: Steuerpflichtiger Anteil des Tagessatzes für einen regulären
            Arbeitstag.
          example: 1.5
        daily_rate_partial:
          type:
            - number
            - "null"
          description: Tagessatz für einen Teiltag an diesem Einsatzort.
          example: 1.5
        daily_rate_fullday:
          type:
            - number
            - "null"
          description: Tagessatz für einen ganzen Abwesenheitstag an diesem Einsatzort.
          example: 1.5
        daily_rate_fullday_taxed:
          type:
            - number
            - "null"
          description: Steuerpflichtiger Anteil des Tagessatzes für einen ganzen
            Abwesenheitstag.
          example: 1.5
        rate_meal_flat:
          type:
            - number
            - "null"
          description: Verpflegungspauschale für diesen Einsatzort.
          example: 1.5
        rate_breakfast_percent:
          type:
            - number
            - "null"
          description: Prozentsatz der Verpflegungspauschale, der bei gestelltem Frühstück
            abgezogen wird.
          example: 1.5
        rate_breakfast_percent_taxed:
          type:
            - number
            - "null"
          description: Steuerpflichtiger Anteil des Frühstücksabzugs.
          example: 1.5
        rate_lunch_percent:
          type:
            - number
            - "null"
          description: Prozentsatz der Verpflegungspauschale, der bei gestelltem
            Mittagessen abgezogen wird.
          example: 1.5
        rate_lunch_percent_taxed:
          type:
            - number
            - "null"
          description: Steuerpflichtiger Anteil des Mittagessensabzugs.
          example: 1.5
        rate_dinner_percent:
          type:
            - number
            - "null"
          description: Prozentsatz der Verpflegungspauschale, der bei gestelltem
            Abendessen abgezogen wird.
          example: 1.5
        currency:
          type:
            - string
            - "null"
          description: Währung, in der die Sätze des Einsatzorts angegeben sind.
          example: EUR
        type:
          type:
            - object
            - "null"
          description: Ob es sich um eine reguläre Dienstreise oder eine andere Art von
            Dienstreise handelt.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Regular business trip
                - Other business trip
          required:
            - id
            - name
        inland:
          type: boolean
          description: Ob der Einsatzort steuerlich als Inland gilt.
          example: true
        home_work_location:
          type: boolean
          description: Ob dieser Einsatzort der reguläre Heimarbeitsort des Mitarbeiters
            ist.
          example: true
      required:
        - name
        - description
        - location_list_id
        - daily_rate_workday
        - daily_rate_workday_taxed
        - daily_rate_partial
        - daily_rate_fullday
        - daily_rate_fullday_taxed
        - rate_meal_flat
        - rate_breakfast_percent
        - rate_breakfast_percent_taxed
        - rate_lunch_percent
        - rate_lunch_percent_taxed
        - rate_dinner_percent
        - currency
        - type
        - inland
        - home_work_location
      title: LocationResource
    MealAllowance:
      type: integer
      description: |
        Class MealAllowance
      enum:
        - 0
        - 1
        - 2
        - 3
      title: MealAllowance
    Meal:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der erfassten Mahlzeit.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Mahlzeit erfasst wurde.
          example: max.mustermann
        date:
          type: string
          format: date-time
          description: Kalendertag, für den die Mahlzeit erfasst wurde.
          example: 2024-07-20T00:00:00.000000Z
        breakfast:
          type:
            - integer
            - "null"
          description: Ob an diesem Tag ein Frühstück eingenommen wurde.
          example: 0
        lunch:
          type:
            - integer
            - "null"
          description: Ob an diesem Tag ein Mittagessen eingenommen wurde.
          example: 1
        dinner:
          type:
            - integer
            - "null"
          description: Ob an diesem Tag ein Abendessen eingenommen wurde.
          example: 0
      required:
        - id
        - employee_id
        - date
        - breakfast
        - lunch
        - dinner
      title: MealResource
    OfferItem:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Angebotsposition.
          example: 1
        offer_id:
          type: integer
          description: Die ID des Angebots, zu dem diese Position gehört.
          example: 1
        position:
          type:
            - string
            - "null"
          description: Die Positionsnummer dieser Position im Angebot, z. B. "1" oder
            "2.1" für eine Unterposition.
          example: "1"
        label:
          type:
            - string
            - "null"
          description: Der Kurztitel der Position, wie er auf dem Angebot gedruckt wird.
          example: "&laquo; Previous"
        description:
          type:
            - string
            - "null"
          description: Eine längere Freitextbeschreibung der Position, gedruckt unter
            ihrem Titel.
          example: Angebot|en:offer
        type:
          type: object
          description: Der Typ der Position (z. B. Artikel, Aufwand oder prozentualer
            Zuschlag), der bestimmt, welche der übrigen Felder gelten.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Gliederung
                - Artikel
                - Expenditure
                - Pauschal
                - Fixed price (free)
                - Surcharge in percent
          required:
            - id
            - name
        quantity:
          type: number
          description: Die Menge dieser Position.
          example: 1.5
        unit:
          type:
            - string
            - "null"
          description: Die Einheit, in der die Menge angegeben ist (z. B. Stunden, Stück
            oder Prozent), abgeleitet aus dem Typ der Position.
          example: Stunde
        single_price:
          type: number
          description: Der Preis pro Einheit dieser Position, in der Währung des Angebots.
          example: 1.5
        receipts_mileage_money:
          type:
            - number
            - "null"
          description: Das erstattete Kilometergeld, das in der Summe dieser
            Aufwandsposition enthalten ist, sofern vorhanden.
          example: 1.5
        additional_meal_expenses:
          type:
            - number
            - "null"
          description: Der erstattete Verpflegungsmehraufwand, der in der Summe dieser
            Aufwandsposition enthalten ist, sofern vorhanden.
          example: 1.5
        amount_deviating_net:
          type:
            - number
            - "null"
          description: Ein Nettobetrag, der die berechnete Summe dieser Position
            überschreibt, sofern gesetzt.
          example: 1.5
        display_calculation:
          type: boolean
          description: Ob die Kalkulationsaufstellung dieser Position auf dem
            Angebotsdokument angezeigt wird.
          example: false
        display_total:
          type: boolean
          description: Ob der Gesamtpreis dieser Position auf dem Angebotsdokument
            angezeigt wird.
          example: true
        is_alternative:
          type: boolean
          description: Ob diese Position eine Alternativposition ist, die angeboten, aber
            nicht in die Angebotssumme einbezogen wird.
          example: false
        sort_order:
          type:
            - integer
            - "null"
          description: Die Sortierposition dieser Position unter den Positionen des
            Angebots.
          example: 1
        article_id:
          type:
            - integer
            - "null"
          description: Die ID des Artikels, auf dem diese Position basiert, sofern
            vorhanden.
          example: 1
        expenditure_billing_type:
          type:
            - object
            - "null"
          description: Wie eine Aufwandsposition abgerechnet wird (z. B. Tagessatz oder
            Stundensatz).
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Stundensatz
                - Tagessatz
          required:
            - id
            - name
        vat:
          type:
            - number
            - "null"
          description: Der auf diese Position angewendete Mehrwertsteuersatz in Prozent.
          example: 1.5
      required:
        - id
        - offer_id
        - position
        - label
        - description
        - type
        - quantity
        - unit
        - single_price
        - receipts_mileage_money
        - additional_meal_expenses
        - amount_deviating_net
        - display_calculation
        - display_total
        - is_alternative
        - sort_order
        - article_id
        - expenditure_billing_type
        - vat
      title: OfferItemResource
    Offer:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Angebots.
          example: 1
        name:
          type:
            - string
            - "null"
          description: Die Angebotsnummer, die als lesbare Kennung des Angebots dient.
          example: EU
        customer_id:
          type:
            - integer
            - "null"
          description: Die ID des Kunden, für den dieses Angebot erstellt wurde.
          example: 1
        customer_contact_id:
          type:
            - integer
            - "null"
          description: Die ID des Ansprechpartners, an den sich dieses Angebot richtet,
            falls vorhanden.
          example: 789
        department_id:
          type:
            - integer
            - "null"
          description: Die ID der Abteilung, die dieses Angebot erstellt hat.
          example: 1
        project_id:
          type:
            - integer
            - "null"
          description: Die ID des Projekts, mit dem dieses Angebot verknüpft ist, falls
            vorhanden.
          example: 16
        ticket_id:
          type:
            - integer
            - "null"
          description: Die ID des Tickets, aus dem dieses Angebot hervorgegangen ist,
            falls vorhanden.
          example: 1234
        title:
          type: string
          description: Der Titel des Angebots, wie er dem Kunden angezeigt wird.
          example: Dr.
        note:
          type:
            - string
            - "null"
          description: Interne Notizen zum Angebot, die dem Kunden nicht angezeigt werden.
          example: Familienurlaub
        version:
          type:
            - string
            - "null"
          description: Die Versionsnummer des Angebots, die bei jeder Überarbeitung erhöht
            wird.
          example: "2.0"
        status:
          type: object
          description: Der Status des Angebots in seinem Lebenszyklus (z. B. neu,
            beauftragt, abgelehnt).
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - neu
                - in Arbeit
                - Finished
                - in Prüfung
                - Reviewed
                - Dokument erstellt
                - Offered as mail
                - Offered as letter
                - Ordered
                - bestätigt
                - Transferred to project
                - Settled
                - Declined
          required:
            - id
            - name
        status_since:
          type:
            - string
            - "null"
          format: date-time
          description: Datum und Uhrzeit der letzten Statusänderung des Angebots.
          example: 2024-08-27T14:27:01.000000Z
        responsible_username:
          type:
            - string
            - "null"
          description: Der Benutzername des für dieses Angebot verantwortlichen
            Mitarbeiters.
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der dieses Angebot aktuell
            bearbeitet.
          example: frank
        is_net:
          type:
            - integer
            - "null"
          description: Ob die Preise des Angebots netto (ohne Umsatzsteuer) statt brutto
            angegeben sind.
          example: 0
        currency:
          type:
            - string
            - "null"
          description: Der ISO-Währungscode, der für die Preise dieses Angebots verwendet
            wird.
          example: EUR
        default_validity:
          type:
            - integer
            - "null"
          description: Die Anzahl der Tage, die dieses Angebot standardmäßig gültig ist,
            gerechnet ab seiner Erstellung.
          example: 30
        valid_until:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem dieses Angebot gültig ist.
          example: 2024-11-30T00:00:00.000000Z
        order_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem der Kunde auf Basis dieses Angebots bestellt hat,
            sofern es beauftragt wurde.
        address:
          type:
            - string
            - "null"
          description: Die auf dem Angebotsdokument gedruckte Adresse.
          example: Musterstraße 123
        keywords:
          type:
            - object
            - "null"
          description: Kommagetrennte Freitext-Schlagwörter zum Suchen und Filtern von
            Angeboten.
        language:
          type:
            - string
            - "null"
          description: Die Sprache, in der das Dokument dieses Angebots verfasst ist.
          example: de
        realization_from:
          type:
            - string
            - "null"
          format: date-time
          description: Das Startdatum des Zeitraums, in dem die angebotene Leistung
            erbracht werden soll.
          example: 2025-01-01T00:00:00.000000Z
        realization_until:
          type:
            - string
            - "null"
          format: date-time
          description: Das Enddatum des Zeitraums, in dem die angebotene Leistung erbracht
            werden soll.
          example: 2025-03-31T00:00:00.000000Z
        categories:
          type: array
          description: >-
            Die diesem Angebot zugeordneten Kategorien. Nur bei GET
            /offers/{offer} vorhanden; nicht

            beim Listen-Endpunkt GET /offers.
          items:
            $ref: "#/components/schemas/Category"
        items_count:
          type: integer
          description: >-
            Die Anzahl der Positionen dieses Angebots. Nur bei GET
            /offers/{offer} vorhanden; nicht beim

            Listen-Endpunkt GET /offers.
          example: 1
        order_probability_percent:
          type:
            - integer
            - "null"
          description: Die geschätzte Wahrscheinlichkeit in Prozent, dass dieses Angebot
            beauftragt wird.
          example: 50
      required:
        - id
        - name
        - customer_id
        - customer_contact_id
        - department_id
        - project_id
        - ticket_id
        - title
        - note
        - version
        - status
        - status_since
        - responsible_username
        - processor_username
        - is_net
        - currency
        - default_validity
        - valid_until
        - order_date
        - address
        - keywords
        - language
        - realization_from
        - realization_until
        - order_probability_percent
      title: OfferResource
    PlanCanExceedOption:
      type: integer
      description: |
        Class PlanCanExceedOption
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
      title: PlanCanExceedOption
    Planning:
      type: object
      properties:
        id:
          type: string
          description: Eindeutige Kennung des Planungseintrags.
        date:
          type: string
          description: Datum, für das der Planungseintrag gilt.
          example: 2024-07-20T00:00:00.000000Z
        employee_id:
          type: string
          description: Kennung des verplanten Mitarbeiters.
          example: max.mustermann
        project_id:
          type:
            - integer
            - "null"
          description: Kennung des verplanten Projekts.
          example: 16
        customer_number:
          type:
            - string
            - "null"
          description: Nummer des verplanten Kunden.
          example: K-12345
        project_task_id:
          type:
            - integer
            - "null"
          description: Kennung des verplanten Vorgangs.
          example: 1
        ticket_id:
          type:
            - integer
            - "null"
          description: Kennung des verplanten Tickets.
          example: 1234
        subtask_id:
          type:
            - integer
            - "null"
          description: Kennung der verplanten Teilaufgabe des Tickets.
          example: 1
        type:
          type: integer
          description: "Welche Art von Objekt der Eintrag verplant: Projekt, Ticket,
            Vorgang oder Teilaufgabe."
          example: 1
        kind:
          type: integer
          description: "Wie die geplante Menge ausgedrückt wird: Prozent, Stunden, Tag
            oder ein Zeitbereich."
          example: 1
        planning:
          type:
            - number
            - "null"
          description: Die geplante Menge in der durch ihre Art festgelegten Einheit.
          example: 1.5
        from:
          type:
            - string
            - "null"
          format: date-time
          description: Beginn des geplanten Zeitbereichs, wenn die Art ein Zeitbereich ist.
        to:
          type:
            - string
            - "null"
          format: date-time
          description: Ende des geplanten Zeitbereichs, wenn die Art ein Zeitbereich ist.
        planning_in_hours:
          type:
            - number
            - "null"
          description: Die geplante Menge, umgerechnet in Stunden.
          example: 1.5
        planning_in_days:
          type:
            - number
            - "null"
          description: Die geplante Menge, umgerechnet in Tage.
          example: 1.5
        planning_in_percent:
          type:
            - number
            - "null"
          description: Die geplante Menge, umgerechnet in Prozent.
          example: 1.5
        working_day:
          type:
            - integer
            - "null"
          description: Ob das geplante Datum für den Mitarbeiter ein Arbeitstag ist.
          example: 1
        note:
          type:
            - string
            - "null"
          description: Freitext-Notiz zum Planungseintrag.
          example: Familienurlaub
        created_at:
          type:
            - string
            - "null"
          description: Datum und Uhrzeit der Erstellung des Planungseintrags.
          example: 2024-01-15T10:30:00+01:00
        updated_at:
          type:
            - string
            - "null"
          description: Datum und Uhrzeit der letzten Änderung des Planungseintrags.
          example: 2024-06-20T14:45:00+02:00
        planning_details:
          description: >-
            Planungsdetails je nach Art

            Aufschlüsselung der geplanten Menge, strukturiert entsprechend der
            Art des Eintrags.
          anyOf:
            - type: object
              properties:
                type:
                  type: string
                  const: days
                value:
                  type:
                    - number
                    - "null"
                unit:
                  type: string
                  const: days
                effective_hours:
                  type:
                    - number
                    - "null"
                from_time:
                  type:
                    - string
                    - "null"
                  format: date-time
                to_time:
                  type:
                    - string
                    - "null"
                  format: date-time
              required:
                - type
                - value
                - unit
                - effective_hours
                - from_time
                - to_time
            - type: object
              properties:
                type:
                  type: "null"
                value:
                  type:
                    - number
                    - "null"
                unit:
                  type: "null"
              required:
                - type
                - value
                - unit
        employee:
          type: object
          description: |-
            Verknüpfte Daten (wenn geladen)
            Die Basisdaten des verplanten Mitarbeiters, wenn geladen.
          properties:
            username:
              type: string
            firstname:
              type: string
            lastname:
              type: string
            email:
              type:
                - string
                - "null"
          required:
            - username
            - firstname
            - lastname
            - email
        project:
          type: object
          description: Die Basisdaten des verplanten Projekts, wenn geladen.
          properties:
            id:
              type: integer
            name:
              type:
                - string
                - "null"
          required:
            - id
            - name
        customer:
          type: object
          description: Die Basisdaten des verplanten Kunden, wenn geladen.
          properties:
            customer_number:
              type: string
            name:
              type:
                - string
                - "null"
          required:
            - customer_number
            - name
      required:
        - id
        - date
        - employee_id
        - project_id
        - customer_number
        - project_task_id
        - ticket_id
        - subtask_id
        - type
        - kind
        - planning
        - from
        - to
        - planning_in_hours
        - planning_in_days
        - planning_in_percent
        - working_day
        - note
        - created_at
        - updated_at
        - planning_details
      title: PlanningResource
    PriceFactor:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Preisfaktors.
          example: 1
        day:
          type: object
          description: Wochentag, für den dieser Faktor gilt.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - So
                - Montag
                - Dienstag
                - Mittwoch
                - Donnerstag
                - Freitag
                - Samstags
                - Feiertag
                - Alle Arbeitstage
          required:
            - id
            - name
        start_time:
          type:
            - string
            - "null"
          format: date-time
          description: Uhrzeit, ab der dieser Faktor gilt.
          example: 11:10:49
        end_time:
          type:
            - string
            - "null"
          format: date-time
          description: Uhrzeit, bis zu der dieser Faktor gilt.
          example: 15:10:49
        factor:
          type: number
          description: Multiplikator, der in diesem Zeitfenster auf den Preis angewendet
            wird.
          example: 1.5
        price_table_id:
          type: integer
          description: Kennung der Preistabelle, zu der dieser Faktor gehört.
          example: 1
        activity_id:
          type:
            - integer
            - "null"
          description: Kennung der Tätigkeit, auf die dieser Faktor beschränkt ist, falls
            vorhanden.
          example: 1
      required:
        - id
        - day
        - start_time
        - end_time
        - factor
        - price_table_id
        - activity_id
      title: PriceFactorResource
    PriceGroup:
      type: object
      properties:
        id:
          type: integer
          description: Die eindeutige Kennung der Preisgruppe.
          example: 1
        name:
          type: string
          description: Der Name der Preisgruppe, wie er bei der Zuordnung zu einem Kunden
            oder Projekt angezeigt wird.
          example: EU
        number:
          type:
            - string
            - "null"
          description: Die Nummer der Preisgruppe, die zur externen Referenzierung
            verwendet wird.
        status:
          type: boolean
          description: Ob die Preisgruppe aktiv ist; die zugrunde liegende Spalte wird
            invertiert gespeichert, true bedeutet hier aktiv.
          example: true
        description:
          type: object
          description: Die Beschreibung der Preisgruppe, ausgegeben als sprachabhängige
            Struktur (i18n) statt als einfache Zeichenkette.
          properties:
            de:
              type:
                - string
                - "null"
            en:
              type: string
            fr:
              type: string
            es:
              type: string
            pl:
              type: string
      required:
        - id
        - name
        - number
        - status
        - description
      title: PriceGroupResource
    Price:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Preises.
          example: 1
        price_group:
          type: string
          description: Preisgruppe, für die dieser Preis gilt.
          example: Junior-Entwickler
        price:
          type: number
          description: Der Preisbetrag.
          example: 1.5
        price_table_id:
          type: string
          description: Kennung der Preistabelle, zu der dieser Preis gehört.
        type:
          type:
            - object
            - "null"
          description: Ob dieser Preis ein Stundensatz, ein Tagessatz oder eine Pauschale
            ist.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Stundensatz
                - Tagessatz
          required:
            - id
            - name
        activity:
          type:
            - string
            - "null"
          description: Tätigkeit, für die dieser Preis gilt, wenn er auf eine einzelne
            Tätigkeit beschränkt ist.
        ahr_factor:
          type:
            - number
            - "null"
          description: >-
            Stundensatzzuschlag, der auf diesen Preis angewendet wird.

            Nur in Instanzen mit der Erweiterung MOD_3P. Keine allgemein
            verfügbare Funktion.
          example: 1.5
      required:
        - id
        - price_group
        - price
        - price_table_id
        - type
        - activity
      title: PriceResource
    PriceTable:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Preistabelle.
          example: 1
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, ab dem die Preistabelle gilt.
          example: 2024-01-15T00:00:00.000000Z
        customer_number:
          type:
            - string
            - "null"
          description: Nummer des Kunden, zu dem diese Preistabelle gehört, bei einer
            Preistabelle auf Kundenebene.
          example: K-12345
        project_id:
          type:
            - integer
            - "null"
          description: Kennung des Projekts, zu dem diese Preistabelle gehört, bei einer
            Preistabelle auf Projektebene.
          example: 16
        type:
          type:
            - object
            - "null"
          description: Ob die Preistabelle einem Kunden oder einem Projekt zugeordnet ist.
          properties:
            id:
              type: string
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Basispreistabelle
                - Project Price Table
                - Customer Price Table
          required:
            - id
            - name
        prices:
          type: array
          description: In dieser Preistabelle definierte Preise.
          items:
            $ref: "#/components/schemas/Price"
        factors:
          type: array
          description: In dieser Preistabelle definierte zeitabhängige Faktoren, z. B. für
            Nacht- oder Wochenendzuschläge.
          items:
            $ref: "#/components/schemas/PriceFactor"
      required:
        - id
        - start_date
        - type
      title: PriceTableResource
    ProjectActivity:
      type: object
      properties:
        id:
          type: string
          description: Eindeutige Kennung der Tätigkeit.
        name:
          type: string
          description: Name der Tätigkeit.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitextbeschreibung der Tätigkeit.
          example: Angebot|en:offer
        is_travel:
          type: boolean
          description: Ob die Tätigkeit als Reisezeit zählt.
          example: false
        is_goodwill:
          type:
            - boolean
            - "null"
          description: Ob die Tätigkeit nicht abrechenbare Kulanzarbeit ist, die dem
            Kunden nicht in Rechnung gestellt wird.
          example: true
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Tätigkeit.
          example: Familienurlaub
        default_factor:
          type: number
          description: Faktor, mit dem die Stunden dieser Tätigkeit für dieses Projekt
            multipliziert werden, z. B. für Reisezeiten.
          example: 1.5
        travel_type:
          type:
            - object
            - "null"
          description: Ob die Tätigkeit reine Reise, reiner Bereitschaftsdienst oder
            sowohl Reise als auch Bereitschaftsdienst ist.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Pure travel
                - Purely on call
                - Travel and on call
          required:
            - id
            - name
      required:
        - id
        - name
        - description
        - is_travel
        - is_goodwill
        - note
        - default_factor
        - travel_type
      title: ProjectActivityResource
    ProjectEmployee:
      anyOf:
        - type: object
          properties:
            id:
              type: integer
              description: Unique identifier of the assignment.
            employee_id:
              type: string
              description: Identifier of the assigned employee.
            project_id:
              type: integer
              description: Identifier of the project the assignment belongs to.
            from:
              type:
                - string
                - "null"
              format: date-time
              description: Date the assignment starts.
            to:
              type:
                - string
                - "null"
              format: date-time
              description: Date the assignment ends.
            note:
              type:
                - string
                - "null"
              description: Free-text note about the assignment.
            availability:
              type:
                - integer
                - "null"
              description: How much of the employee's time is available for this project.
            internal_rate:
              type:
                - number
                - "null"
              description: Internal rate applied to this employee's time on the project.
            rate_type:
              type:
                - object
                - "null"
              description: "How the internal rate is applied: per hour, per day, or as a fixed
                amount."
              properties:
                id:
                  type: integer
                  description: The stored value. Compare against this, not against name.
                name:
                  type: string
                  description: The human-readable label, delivered in the tenant's language. Do
                    not parse it.
                  enum:
                    - Hourly
                    - Täglich
                    - keines
              required:
                - id
                - name
            type:
              type: object
              description: The employee's position on the project, e.g. lead or member.
              properties:
                id:
                  type: integer
                  description: The stored value. Compare against this, not against name.
                name:
                  type: string
                  description: The human-readable label, delivered in the tenant's language. Do
                    not parse it.
                  enum:
                    - Project member
                    - Project manager with budget responsibility
                    - Projektleiter
              required:
                - id
                - name
            priceGroup:
              description: Price group the employee is billed with on this project.
              $ref: "#/components/schemas/PriceGroup"
          required:
            - id
            - employee_id
            - project_id
            - from
            - to
            - note
            - availability
            - internal_rate
            - rate_type
            - type
            - priceGroup
        - type: array
          items:
            type: string
          minItems: 0
          maxItems: 0
          additionalItems: false
      title: ProjectEmployeeResource
    ProjectLocation:
      type: object
      properties:
        name:
          type: string
          description: Name des Einsatzorts.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitextbeschreibung des Einsatzorts.
          example: Angebot|en:offer
        project_id:
          type:
            - integer
            - "null"
          description: Kennung des Projekts, dem dieser Einsatzort zugeordnet ist.
          example: 16
      required:
        - name
        - description
        - project_id
      title: ProjectLocationResource
    ProjectRelease:
      type: integer
      description: >
        ProjectRelease Enum This enum represents the different states of a
        project release.
      enum:
        - -1
        - 0
        - 1
        - 2
      title: ProjectRelease
    Project:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Projekts.
          example: 1
        name:
          type:
            - string
            - "null"
          description: Name des Projekts.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Projekts.
          example: Angebot|en:offer
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem das Projekt beginnt.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem das Projekt endet, sofern ein Ende festgelegt ist.
          example: 2024-01-16T00:00:00.000000Z
        project_status_id:
          type: string
          description: Kennung des aktuellen Projektstatus.
          example: aktiv
        status:
          description: Der aktuelle Status des Projekts, einschließlich seiner Bezeichnung
            und ob er abrechenbar ist.
          allOf:
            - $ref: "#/components/schemas/ProjectStatus"
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Kommentare zum Projekt.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        cost_object:
          type:
            - string
            - "null"
          description: Kostenstelle, der die Buchungen des Projekts für Buchhaltungszwecke
            zugeordnet werden.
        cost_object_identifier:
          type:
            - string
            - "null"
          description: Dem Projekt zugeordneter Kostenträger, eine von der Kostenstelle
            getrennte Buchhaltungsdimension, die für den Buchhaltungsexport
            verwendet wird.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Datum und Uhrzeit der Erstellung des Projekts.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Datum und Uhrzeit der letzten Änderung des Projekts.
          example: 2024-07-20T12:30:00.000000Z
        keywords:
          type: array
          description: Freitext-Schlagwörter zur Suche nach dem Projekt.
          items: {}
        reference_order:
          type:
            - string
            - "null"
          description: Bestellreferenz des Kunden für dieses Projekt.
        reference_commission:
          type:
            - string
            - "null"
          description: Kommissionsreferenz des Kunden für dieses Projekt.
        reference_procurement:
          type:
            - string
            - "null"
          description: Beschaffungsreferenz des Kunden für dieses Projekt.
        reference_object:
          type:
            - string
            - "null"
          description: Objektreferenz des Kunden für dieses Projekt.
        language:
          type:
            - string
            - "null"
          description: Sprache, die für Dokumente dieses Projekts verwendet wird.
          example: de
        currency:
          type:
            - string
            - "null"
          description: Währung, die für Geldbeträge in diesem Projekt verwendet wird.
          example: EUR
        url:
          type:
            - string
            - "null"
          description: Mit dem Projekt verknüpfte URL, zum Beispiel ein Link zu einem
            Kundenportal.
          example: https://www.zep-online.de/zepinstanz/next/api/v1/articles?page=1
        location_address:
          type:
            - string
            - "null"
          description: Straße und Hausnummer des Projektstandorts.
        location_city:
          type:
            - string
            - "null"
          description: Ort des Projektstandorts.
        location_state:
          type:
            - string
            - "null"
          description: Bundesland oder Region des Projektstandorts.
        location_country:
          type:
            - string
            - "null"
          description: Land des Projektstandorts.
        revenue_account:
          type:
            - string
            - "null"
          description: Erlöskonto, auf das der Umsatz des Projekts gebucht wird.
          example: "8400"
        customer_id:
          type:
            - string
            - "null"
          description: Kennung des Kunden, zu dem dieses Projekt gehört.
        customer_contact_id:
          type:
            - string
            - "null"
          description: Kennung des für dieses Projekt verantwortlichen Ansprechpartners.
        customer_project_reference:
          type:
            - string
            - "null"
          description: Eigene Referenznummer des Kunden für dieses Projekt.
        customer_billing_address_id:
          type:
            - string
            - "null"
          description: Kennung der Kundenadresse, die für die Rechnungsstellung verwendet
            wird.
        customer_shipping_address_id:
          type:
            - string
            - "null"
          description: Kennung der Kundenadresse, die für den Versand verwendet wird.
        has_multiple_customers:
          type:
            - boolean
            - "null"
          description: Ob das Projekt an mehr als einen Kunden abgerechnet werden kann.
          example: true
        department_id:
          type:
            - integer
            - "null"
          description: Kennung der Abteilung, der das Projekt zugeordnet ist.
          example: 1
        billing_type:
          type:
            - object
            - "null"
          description: "Wie das Projekt abgerechnet wird: Stundensatz, Tagessatz oder
            Pauschale."
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Stundensatz
                - Tagessatz
                - Pausch
          required:
            - id
            - name
        billing_tasks:
          type:
            - string
            - "null"
          description: Ob die Vorgänge des Projekts jeweils eine eigene Abrechnungsart
            haben können.
        plan_hours:
          type:
            - number
            - "null"
          description: Geplante Gesamtstunden, die für das Projekt budgetiert sind.
          example: 1.5
        plan_hours_children:
          type:
            - number
            - "null"
          description: Geplante Stunden, die über die Vorgänge des Projekts budgetiert sind.
          example: 1.5
        plan_hours_per_day:
          type:
            - number
            - "null"
          description: Geplante Stunden, die pro Tag für das Projekt budgetiert sind.
          example: 1.5
        plan_can_exceed:
          type:
            - object
            - "null"
          description: "Ob erfasste Stunden das geplante Budget überschreiten dürfen: für
            alle Zeiten, nur für nicht abrechenbare Zeiten, gar nicht, nur für
            Reise- oder nicht abrechenbare Zeiten oder nur für Reisezeiten."
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Yes, all times can exceed the plan hours
                - Yes, but only non-billable times can exceed the plan hours
                - No, all times can not exceed the plan hours
                - Yes, but only travel or non-billable times can exceed the plan
                  hours
                - Yes, but only travel times can exceed the plan hours
          required:
            - id
            - name
        plan_warning_percent:
          type:
            - number
            - "null"
          description: Prozentsatz des geplanten Budgets, bei dem eine Warnung ausgelöst
            wird.
          example: 1.5
        plan_warning_percent_2:
          type:
            - number
            - "null"
          description: Zweite Warnschwelle als Prozentsatz des geplanten Budgets.
          example: 1.5
        plan_warning_percent_3:
          type:
            - number
            - "null"
          description: Dritte Warnschwelle als Prozentsatz des geplanten Budgets.
          example: 1.5
        plan_wage:
          type:
            - number
            - "null"
          description: Geplante Gesamtlohnkosten, die für das Projekt budgetiert sind.
          example: 1.5
        plan_expenses:
          type:
            - number
            - "null"
          description: Geplante Gesamtausgaben, die für das Projekt budgetiert sind.
          example: 1.5
        plan_expenses_travel:
          type:
            - number
            - "null"
          description: Geplante Reisekosten, die für das Projekt budgetiert sind.
          example: 1.5
        plan_hours_done:
          type:
            - number
            - "null"
          description: Bereits auf das Projekt erfasste Stunden.
          example: 1.5
        plan_hours_invoiced:
          type:
            - number
            - "null"
          description: Bereits für das Projekt in Rechnung gestellte Stunden.
          example: 1.5
        default_billability:
          type: object
          description: Standard-Abrechenbarkeit, die auf neue Zeiteinträge in diesem
            Projekt angewendet wird.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Fakturierbar, durch den Mitarbeiter änderbar
                - Fakturierbar, durch den Mitarbeiter nicht änderbar
                - Not billable, user can change the flag
                - Not billable, user can not change the flag
          required:
            - id
            - name
        receipts_billability:
          type:
            - object
            - "null"
          description: Standard-Abrechenbarkeit, die auf neue Belege in diesem Projekt
            angewendet wird.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Specify billable amount apart
                - Vorbelegung identisch weiterfakturieren
                - Vorbelegung nicht weiterfakturieren
                - keine Belegerfassung möglich
          required:
            - id
            - name
        plan_wage_children:
          type:
            - number
            - "null"
          description: Geplante Lohnkosten, die über die Vorgänge des Projekts budgetiert
            sind.
          example: 0
        categories:
          type: array
          description: Dem Projekt zugeordnete Kategorien.
          items:
            $ref: "#/components/schemas/Category"
        dynamicAttributes:
          type: array
          description: Für das Projekt konfigurierte dynamische Attribute.
          items:
            $ref: "#/components/schemas/DynamicAttribute"
        categories_count:
          type: integer
          description: Anzahl der dem Projekt zugeordneten Kategorien.
          example: 0
        dynamicAttributes_count:
          type: integer
          description: Anzahl der für das Projekt konfigurierten dynamischen Attribute.
          example: 0
        tasks_count:
          type: integer
          description: Anzahl der zum Projekt gehörenden Vorgänge.
          example: 0
        employees_count:
          type: integer
          description: Anzahl der dem Projekt zugeordneten Mitarbeiter.
          example: 0
        activities_count:
          type: integer
          description: Anzahl der dem Projekt zugeordneten Tätigkeiten.
          example: 0
        priceTables:
          type: array
          description: Dem Projekt zugeordnete Preistabellen. Nur enthalten, wenn sie an
            die Antwort angehängt werden.
          items:
            $ref: "#/components/schemas/PriceTable"
        end_customer_number:
          type:
            - string
            - "null"
          description: >-
            Die Nummer, unter der der Endkunde im eigenen System des Kunden
            geführt wird.

            Nur in Instanzen mit der Erweiterung MOD_PCS. Keine allgemein
            verfügbare Funktion.
      required:
        - id
        - name
        - description
        - start_date
        - end_date
        - project_status_id
        - comments
        - cost_object
        - cost_object_identifier
        - created
        - modified
        - keywords
        - reference_order
        - reference_commission
        - reference_procurement
        - reference_object
        - language
        - currency
        - url
        - location_address
        - location_city
        - location_state
        - location_country
        - revenue_account
        - customer_id
        - customer_contact_id
        - customer_project_reference
        - customer_billing_address_id
        - customer_shipping_address_id
        - has_multiple_customers
        - department_id
        - billing_type
        - billing_tasks
        - plan_hours
        - plan_hours_children
        - plan_hours_per_day
        - plan_can_exceed
        - plan_warning_percent
        - plan_warning_percent_2
        - plan_warning_percent_3
        - plan_wage
        - plan_expenses
        - plan_expenses_travel
        - plan_hours_done
        - plan_hours_invoiced
        - default_billability
        - receipts_billability
        - plan_wage_children
      title: ProjectResource
    ProjectStatus:
      type: object
      properties:
        id:
          type: integer
          description: Kennung des Status. Der Kurzname dient gleichzeitig als
            Primärschlüssel.
          example: 1
        name:
          type: string
          description: Kurzname des Status, wie er in der Projektliste angezeigt wird.
          example: EU
        description:
          type:
            - string
            - "null"
          description: Längere Bezeichnung, die die Bedeutung des Status beschreibt.
          example: Angebot|en:offer
        bookable:
          type: boolean
          description: Ob auf ein Projekt mit diesem Status noch Zeiten gebucht werden
            können.
          example: true
        order:
          type: integer
          description: Sortierposition des Status in Auswahllisten.
          example: 0
        color:
          type:
            - string
            - "null"
          description: Farbe, in der der Status dargestellt wird, als Hex-Wert.
          example: "#664599"
        abrechnungsrelevant:
          type: string
          description: Ob Projekte mit diesem Status in Abrechnungsläufe einbezogen werden.
      required:
        - id
        - name
        - description
        - bookable
        - order
        - color
        - abrechnungsrelevant
      title: ProjectStatusResource
    ProjectTaskBillingType:
      type: integer
      description: >
        How a task is billed: the same way as its project, an hourly rate, a
        daily rate, or a flat rate.
      enum:
        - 0
        - 1
        - 2
        - 3
      title: ProjectTaskBillingType
    ProjectTaskEmployee:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Zuordnung.
          example: 1
        project_id:
          type: integer
          description: Kennung des Projekts, zu dem die Zuordnung gehört.
          example: 16
        project_task_id:
          type: integer
          description: Kennung des Vorgangs, dem der Mitarbeiter zugeordnet ist.
          example: 1
        employee_id:
          type: string
          description: Kennung des zugeordneten Mitarbeiters.
          example: max.mustermann
        from:
          type:
            - string
            - "null"
          description: Datum, an dem die Zuordnung beginnt.
        to:
          type:
            - string
            - "null"
          description: Datum, an dem die Zuordnung endet.
        note:
          type:
            - string
            - "null"
          description: Freitext-Notiz zur Zuordnung.
          example: Familienurlaub
        price_group:
          description: Preisgruppe, mit der der Mitarbeiter in diesem Vorgang abgerechnet
            wird, sofern eine zugeordnet ist.
          anyOf:
            - $ref: "#/components/schemas/PriceGroup"
            - type: "null"
      required:
        - id
        - project_id
        - project_task_id
        - employee_id
        - from
        - to
        - note
        - price_group
      title: ProjectTaskEmployeeResource
    ProjectTask:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des Vorgangs.
          example: 1
        name:
          type: string
          description: Name des Vorgangs.
          example: EU
        status:
          type:
            - string
            - "null"
          description: Kennung des aktuellen Status des Vorgangs, sofern der Status
            ermittelt werden konnte.
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Vorgangs.
          example: Angebot|en:offer
        parent_id:
          type:
            - integer
            - "null"
          description: Kennung des übergeordneten Vorgangs, bei einem Vorgang, der unter
            einem anderen eingeordnet ist.
          example: 1
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem der Vorgang beginnt.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem der Vorgang endet.
          example: 2024-01-16T00:00:00.000000Z
        billing_type:
          type:
            - object
            - "null"
          description: "Wie der Vorgang abgerechnet wird: Stundensatz, Tagessatz,
            Pauschale oder wie das Projekt."
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - Like project
                - Stundensatz
                - Tagessatz
                - Pausch
          required:
            - id
            - name
        project_id:
          type: integer
          description: Kennung des Projekts, zu dem dieser Vorgang gehört.
          example: 16
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Datum und Uhrzeit der Erstellung des Vorgangs.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Datum und Uhrzeit der letzten Änderung des Vorgangs.
          example: 2024-07-20T12:30:00.000000Z
        plan_hours_children:
          type:
            - number
            - "null"
          description: Geplante Stunden, die über die Teilaufgaben dieses Vorgangs
            budgetiert sind.
          example: 1.5
        plan_hours_done:
          type:
            - number
            - "null"
          description: Bereits auf den Vorgang erfasste Stunden.
          example: 1.5
        plan_wage:
          type:
            - number
            - "null"
          description: Geplante Gesamtlohnkosten, die für den Vorgang budgetiert sind.
          example: 1.5
        plan_hours:
          type:
            - number
            - "null"
          description: Geplante Gesamtstunden, die für den Vorgang budgetiert sind.
          example: 1.5
        plan_wage_children:
          type:
            - number
            - "null"
          description: Geplante Lohnkosten, die über die Teilaufgaben dieses Vorgangs
            budgetiert sind.
          example: 0
        plan_hours_invoiced:
          type:
            - number
            - "null"
          description: Bereits für den Vorgang abgerechnete Stunden.
          example: 1.5
        order_number:
          type:
            - string
            - "null"
          description: Fortlaufende Ordnungsnummer des Vorgangs, wird zur Sortierung
            verwendet.
        tickets_import_mailbox_name:
          type:
            - string
            - "null"
          description: Name des Postfachs, aus dem Tickets in diesen Vorgang importiert
            werden.
        dynamicAttributes:
          type: array
          description: Für den Vorgang konfigurierte dynamische Attribute.
          items:
            $ref: "#/components/schemas/DynamicAttribute"
      required:
        - id
        - name
        - status
        - description
        - parent_id
        - start_date
        - end_date
        - billing_type
        - project_id
        - created
        - modified
        - plan_hours_children
        - plan_hours_done
        - plan_wage
        - plan_hours
        - plan_wage_children
        - plan_hours_invoiced
        - order_number
        - tickets_import_mailbox_name
      title: ProjectTaskResource
    ReceiptAmount:
      type: object
      properties:
        id:
          type: integer
          description: Die eindeutige Kennung der Belegbetragszeile.
          example: 1
        receipt_id:
          description: Der übergeordnete Beleg, zu dem diese Betragszeile gehört; eine
            Altspalte, die entweder als String oder als Integer ausgegeben wird.
          anyOf:
            - type: string
            - type: integer
          example: 1
        tax:
          type: string
          description: Der auf diese Betragszeile angewendete Steuersatz in Prozent,
            zwischen 0 und 100.
          example: "19.0000"
        quantity:
          type: string
          description: Wie viele Einheiten diese Betragszeile abrechnet, z. B. die Anzahl
            der Kilometer oder Übernachtungen.
          example: "1.00000"
        amount:
          type: string
          description: Der Gesamtbetrag der Zeile; netto oder brutto, abhängig von
            is_amount_net des übergeordneten Belegs.
          example: "285.21"
        invoicing_share:
          type: string
          description: Der Betrag dieser Zeile, der dem Kunden in Rechnung gestellt werden
            kann — ein Betrag, trotz des Namens kein prozentualer Anteil.
          example: "89.50"
        private_share:
          type: string
          description: Der Betrag dieser Zeile, der privat und nicht abrechenbar ist — ein
            Betrag, trotz des Namens kein prozentualer Anteil.
        is_amount_net:
          type: boolean
          description: Ob amount netto oder brutto ist; wird vom übergeordneten Beleg
            übernommen und nicht auf dieser Zeile gespeichert.
          example: false
        is_invoice_amount_net:
          type: boolean
          description: Ob der fakturierbare Betrag netto oder brutto ist; wird vom
            übergeordneten Beleg übernommen und nicht auf dieser Zeile
            gespeichert.
          example: false
        employee_id:
          type:
            - string
            - "null"
          description: Der Mitarbeiter, der den übergeordneten Beleg eingereicht hat; wird
            von diesem übernommen und nicht auf dieser Zeile gespeichert.
          example: max.mustermann
      required:
        - id
        - receipt_id
        - tax
        - quantity
        - amount
        - invoicing_share
        - private_share
        - is_amount_net
        - is_invoice_amount_net
        - employee_id
      title: ReceiptAmountResource
    ReceiptAttachment:
      type: object
      properties:
        filename:
          type:
            - string
            - "null"
          description: Der Name der hochgeladenen Datei, nur vorhanden, sobald eine
            Belegdatei angehängt wurde.
          example: Allgemeine_Geschaeftsbedingungen.pdf
        file_contents:
          type:
            - string
            - "null"
          description: Die Bytes der Belegdatei, base64-kodiert; nur vorhanden, sobald
            eine Datei angehängt wurde.
          example: JVBERi0xLjMgCjEgMCBvYmoKPDwKL1BhZ2VzIDIgMCBSCi9UeXBlIC9DYXRhbG9nCj4+CmVuZG9i...
      required:
        - filename
        - file_contents
      title: ReceiptAttachmentResource
    Receipt:
      type: object
      properties:
        id:
          type: integer
          description: Die eindeutige Kennung des Belegs.
          example: 1
        employee_id:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der diesen Beleg eingereicht hat.
          example: max.mustermann
        date:
          type:
            - string
            - "null"
          description: Das Datum, an dem die Ausgabe erfasst wurde.
          example: 2024-07-20T00:00:00.000000Z
        receipt_type_id:
          type: string
          description: Die Belegart, unter der diese Ausgabe gebucht ist, z. B. Reise oder
            Mahlzeit.
          example: Fahrkarte
        currency:
          type: string
          description: Der dreistellige Währungscode, in dem die Beträge des Belegs
            angegeben sind.
          example: EUR
        invoice_amount_currency:
          type: string
          description: Die Währung des fakturierbaren Reisekostenbetrags, wenn sie von der
            Buchungswährung abweicht.
        note:
          type:
            - string
            - "null"
          description: Eine Freitextnotiz zum Beleg.
          example: Familienurlaub
        payment_method:
          type: string
          description: Wie die Ausgabe bezahlt wurde — z. B. bar, Firmenkarte oder Rechnung.
          example: privat
        breakfast:
          type: string
          description: Der Betrag, der von der Verpflegungspauschale abgezogen wird, weil
            ein Frühstück gestellt wurde, in der Währung des Belegs; 0, wenn
            keines gestellt wurde.
        lunch_or_dinner:
          type: string
          description: Der Betrag, der von der Verpflegungspauschale abgezogen wird, weil
            ein Mittag- oder Abendessen gestellt wurde, in der Währung des
            Belegs; 0, wenn keines gestellt wurde.
        location:
          type:
            - string
            - "null"
          description: Der Ort, an dem die Ausgabe angefallen ist; wird zur Ermittlung der
            Pauschalsätze verwendet.
          example: D
        is_amount_net:
          type: boolean
          description: Ob die Beträge des Belegs Nettobeträge (ohne Steuer) statt
            Bruttobeträge sind.
          example: false
        is_invoice_amount_net:
          type: boolean
          description: Ob der fakturierbare Betrag ein Nettobetrag (ohne Steuer) statt
            eines Bruttobetrags ist.
          example: false
        billing_status:
          type:
            - object
            - "null"
          description: Der Abrechnungsstatus des Belegs — ob er noch abgerechnet werden
            muss, in einer Rechnung enthalten ist oder bereits abgerechnet
            wurde.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - beliebig
                - Not billed
                - Freigegebene
                - Billed
          required:
            - id
            - name
        performance_date:
          type:
            - string
            - "null"
          description: Das Datum, an dem die zugrunde liegende Leistung oder Ausgabe
            tatsächlich stattgefunden hat, falls es vom Buchungsdatum abweicht.
          example: 2024-11-15
        client_id:
          type:
            - integer
            - "null"
          description: Eine clientseitig erzeugte ID, die die mobile App vergibt, wenn sie
            diesen Beleg offline anlegt; wird serverseitig verwendet, um
            doppelte Übermittlungen bei der App-Synchronisation zu erkennen und
            zu überspringen. Kein Verweis auf einen Kunden oder Ansprechpartner.
          example: 1
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Belegdatensatz erstmals angelegt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Belegdatensatz zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
        invoice_item_id:
          type:
            - integer
            - "null"
          description: Die Rechnungsposition, über die dieser Beleg abgerechnet wurde,
            sobald er abgerechnet ist.
          example: 1
        project_id:
          type: integer
          description: Das Projekt, auf das dieser Beleg gebucht ist.
          example: 16
        project_task_id:
          type:
            - integer
            - "null"
          description: Der Vorgang, auf den dieser Beleg gebucht ist, falls das Projekt
            Vorgänge verwendet.
          example: 1
        ticket_id:
          type:
            - integer
            - "null"
          description: Das Ticket, auf das dieser Beleg gebucht ist, falls er aus einem
            Ticket stammt.
          example: 1234
        subtask_id:
          type:
            - integer
            - "null"
          description: Die Teilaufgabe des Tickets, auf die dieser Beleg gebucht ist,
            falls er aus einer solchen stammt.
          example: 1
        filename:
          type:
            - string
            - "null"
          description: Der Name der hochgeladenen Belegdatei, nur vorhanden, sobald eine
            Datei angehängt wurde.
          example: Allgemeine_Geschaeftsbedingungen.pdf
      required:
        - id
        - employee_id
        - date
        - receipt_type_id
        - currency
        - invoice_amount_currency
        - note
        - payment_method
        - breakfast
        - lunch_or_dinner
        - location
        - is_amount_net
        - is_invoice_amount_net
        - billing_status
        - performance_date
        - client_id
        - created
        - modified
        - invoice_item_id
        - project_id
        - project_task_id
        - ticket_id
        - subtask_id
        - filename
      title: ReceiptResource
    ReceiptsBillability:
      type: integer
      description: >
        Default billability applied to new receipts, or whether receipt
        recording is disabled entirely.
      enum:
        - 0
        - 1
        - 2
        - 3
      title: ReceiptsBillability
    RegularWorkingTime:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Regelarbeitszeit.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Regelarbeitszeit gilt.
          example: max.mustermann
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Kalendertag, ab dem diese Regelarbeitszeit gilt.
          example: 2024-01-15T00:00:00.000000Z
        monday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Montag.
          example: 8
        monday_workday:
          type:
            - boolean
            - "null"
          description: Ob Montag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        tuesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Dienstag.
          example: 8
        tuesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Dienstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        wednesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Mittwoch.
          example: 4
        wednesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Mittwoch in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        thursday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Donnerstag.
          example: 8
        thursday_workday:
          type:
            - boolean
            - "null"
          description: Ob Donnerstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        friday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Freitag.
          example: 6
        friday_workday:
          type:
            - boolean
            - "null"
          description: Ob Freitag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        saturday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Samstag.
          example: 0
        saturday_workday:
          type:
            - boolean
            - "null"
          description: Ob Samstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        sunday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Sonntag.
          example: 0
        sunday_workday:
          type:
            - boolean
            - "null"
          description: Ob Sonntag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        is_monthly:
          type:
            - boolean
            - "null"
          description: Ob die Regelarbeitszeit als Monatssumme statt pro Wochentag
            definiert ist.
          example: true
        monthly_hours:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden pro Monat, nur gesetzt, wenn die
            Regelarbeitszeit monatlich definiert ist.
          example: 150.34
        max_hours_in_month:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Monat gemäß dieser
            Regelarbeitszeit.
          example: 137.51
        max_hours_in_week:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Woche gemäß dieser
            Regelarbeitszeit.
          example: 74.25
        holidayCalendar:
          description: Feiertagskalender, aus dem die gesetzlichen Feiertage dieser
            Regelarbeitszeit stammen.
          allOf:
            - $ref: "#/components/schemas/HolidayCalendar"
        breakRegulationType:
          description: Pausenregelung, die bei der Berechnung der Pausen für diese
            Regelarbeitszeit angewendet wird.
          allOf:
            - $ref: "#/components/schemas/BreakRegulationType"
      required:
        - id
        - employee_id
        - start_date
        - monday
        - monday_workday
        - tuesday
        - tuesday_workday
        - wednesday
        - wednesday_workday
        - thursday
        - thursday_workday
        - friday
        - friday_workday
        - saturday
        - saturday_workday
        - sunday
        - sunday_workday
        - is_monthly
        - monthly_hours
        - max_hours_in_month
        - max_hours_in_week
      title: RegularWorkingTimeResource
    ResourcePlanningMonth:
      type: object
      properties:
        month:
          type: string
          description: Kalendermonat im Format YYYY-MM.
          examples:
            - 2026-10
          example: 2026-10
        hours:
          type: number
          description: Geplante Stunden in diesem Monat.
          example: 1.5
      required:
        - month
        - hours
      title: ResourcePlanningMonthResource
    ResourcePlanning:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung der Planung.
          example: 1
        employee_id:
          type: string
          description: Kennung des eingeplanten Mitarbeiters.
          example: max.mustermann
        project_id:
          type: integer
          description: Kennung des eingeplanten Projekts.
          example: 16
        project_task_id:
          type:
            - integer
            - "null"
          description: Kennung des eingeplanten Vorgangs, oder null, wenn das ganze
            Projekt eingeplant ist.
          example: 1
        start_date:
          type: string
          description: Erster Tag der Planung.
          examples:
            - 2026-10-01
          example: 2026-10-01
        end_date:
          type: string
          description: Letzter Tag der Planung, einschließlich.
          examples:
            - 2026-10-31
          example: 2026-10-31
        unit:
          description: "Wie der Wert angegeben ist: Prozent der regulären Arbeitszeit des
            Tages oder Stunden pro Arbeitstag."
          allOf:
            - $ref: "#/components/schemas/ResourcePlanningUnit"
          example: percent
        value:
          type: number
          description: Der geplante Umfang pro Tag, in der angegebenen Einheit.
          example: 1.5
        note:
          type:
            - string
            - "null"
          description: Freitext-Notiz zur Planung.
          example: Familienurlaub
        created:
          type:
            - string
            - "null"
          description: Zeitpunkt, zu dem die Planung angelegt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          description: Zeitpunkt, zu dem die Planung zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
        total_hours:
          type: number
          description: Geplante Stunden über die gesamte Planung, berechnet aus der
            regulären Arbeitszeit des Mitarbeiters an jedem Tag; Feiertage und
            Fehlzeiten werden nicht abgezogen.
          example: 1.5
        monthly_hours:
          type: array
          description: Geplante Stunden je Kalendermonat, den die Planung berührt,
            aufsteigend sortiert.
          examples:
            - - month: 2026-10
                hours: 68.9
              - month: 2026-11
                hours: 65.7
          items:
            $ref: "#/components/schemas/ResourcePlanningMonth"
          example:
            - month: 2026-10
              hours: 68.9
            - month: 2026-11
              hours: 65.7
        employee:
          type: object
          description: Die Basisdaten des eingeplanten Mitarbeiters, sofern geladen.
          examples:
            - username: max.mustermann
              firstname: Max
              lastname: Mustermann
              email: max.mustermann@example.com
          properties:
            username:
              type:
                - string
                - "null"
            firstname:
              type:
                - string
                - "null"
            lastname:
              type:
                - string
                - "null"
            email:
              type:
                - string
                - "null"
          required:
            - username
            - firstname
            - lastname
            - email
          example:
            username: max.mustermann
            firstname: Max
            lastname: Mustermann
            email: max.mustermann@example.com
        project:
          type: object
          description: Die Basisdaten des eingeplanten Projekts, sofern geladen.
          examples:
            - id: 16
              name: Website relaunch
          properties:
            id:
              type:
                - integer
                - "null"
            name:
              type:
                - string
                - "null"
          required:
            - id
            - name
          example:
            id: 16
            name: Website relaunch
      required:
        - id
        - employee_id
        - project_id
        - project_task_id
        - start_date
        - end_date
        - unit
        - value
        - note
        - created
        - modified
        - total_hours
        - monthly_hours
      title: ResourcePlanningResource
    ResourcePlanningUnit:
      type: string
      description: >
        Enum ResourcePlanningUnit How a resource planning's value is expressed:
        percent of each day's regular working time, or hours per working day.
      enum:
        - percent
        - hours
      title: ResourcePlanningUnit
    Salutation:
      type: string
      description: |
        Form of address used when addressing a person (Mr, Ms, various).
      enum:
        - Herr
        - Frau
        - Divers
      title: Salutation
    StoreAbsenceApiRequest:
      type: object
      description: Payload for filing a new absence (a full day, half day, or a number
        of hours) for an employee.
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Fehlzeit erfasst wird.
          maxLength: 32
          example: max.mustermann
        type:
          description: Ob die Fehlzeit einen ganzen Tag, einen halben Tag oder eine Anzahl
            von Stunden umfasst.
          anyOf:
            - $ref: "#/components/schemas/AbsenceType"
            - type: "null"
        hours:
          type:
            - number
            - "null"
          description: Anzahl der Fehlstunden, erforderlich bei einer stundenweisen
            Fehlzeit.
          minimum: 0
          example: 1.5
        from:
          type:
            - string
            - "null"
          description: Uhrzeit, zu der die stundenweise Fehlzeit beginnt, erforderlich bei
            einer stundenweisen Fehlzeit.
        to:
          type:
            - string
            - "null"
          description: Uhrzeit, zu der die stundenweise Fehlzeit endet, erforderlich bei
            einer stundenweisen Fehlzeit.
        timezone:
          type:
            - string
            - "null"
          description: Zeitzone, in der die Von-/Bis-Zeiten der stundenweisen Fehlzeit
            angegeben sind.
          example: Asia/Oral
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Fehlzeit.
          maxLength: 255
          example: Familienurlaub
        planned:
          type:
            - boolean
            - "null"
          description: Ob die Fehlzeit nur geplant und noch nicht genehmigt ist.
          example: true
        start_date:
          type: string
          format: date-time
          description: Erster Kalendertag, den die Fehlzeit umfasst.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type: string
          format: date-time
          description: Letzter Kalendertag, den die Fehlzeit umfasst.
          example: 2024-01-16T00:00:00.000000Z
        absence_reason_id:
          type: string
          description: Kennung des Fehlgrundes (Urlaub, Krankheit, ...), unter dem diese
            Fehlzeit abgelegt ist.
          example: UB
      required:
        - employee_id
        - start_date
        - end_date
        - absence_reason_id
      title: StoreAbsenceApiRequest
    StoreAttendanceApiRequest:
      type: object
      description: Payload for booking a new attendance for one employee.
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Buchung erfasst wird.
          example: max.mustermann
        date:
          type: string
          format: date
          description: Kalendertag, zu dem die Buchung gehört.
          example: 2024-07-20
        from:
          type: string
          description: Uhrzeit, zu der die Buchung beginnt.
        to:
          type: string
          description: Uhrzeit, zu der die Buchung endet. Der Wert 00:00 kennzeichnet eine
            Buchung, die über Mitternacht hinausgeht.
        duration:
          type:
            - number
            - "null"
          description: Gebuchte Dauer in Stunden, erforderlich, wenn die Zeiterfassung nur
            die Dauer erfasst.
          example: 1.5
        locked:
          type:
            - boolean
            - "null"
          description: Ob die Buchung gegen weitere Änderungen gesperrt ist.
          example: false
        is_travel:
          type:
            - boolean
            - "null"
          description: Ob die Buchung Reisezeit statt regulärer Arbeit darstellt.
          example: false
        billable:
          type:
            - boolean
            - "null"
          description: Ob die gebuchte Zeit gegenüber dem Kunden abrechenbar ist.
          example: true
        work_location_is_project_relevant:
          type:
            - boolean
            - "null"
          description: Ob der Arbeitsort dafür relevant ist, ob diese Buchung als
            abrechenbar gilt.
          example: true
        color:
          type:
            - string
            - "null"
          description: Anzeigefarbe, mit der die Buchung in Kalenderansichten
            hervorgehoben wird.
          pattern: ^#[0-9A-F]{6}$
          example: "#664599"
        project_task_id:
          type: number
          description: Kennung des Vorgangs, auf den die gebuchte Zeit erfasst wird.
          example: 1.5
        project_id:
          type: number
          description: Kennung des Projekts, auf das die gebuchte Zeit erfasst wird.
          example: 16
        activity_id:
          type: string
          description: Kennung der während der Buchung ausgeführten Tätigkeit.
          example: im
        start:
          type:
            - string
            - "null"
          description: Startpunkt der Reise, die diese Buchung erfasst; nur bei
            Reisebuchungen gesetzt.
          example: Location A
        destination:
          type:
            - string
            - "null"
          description: Ziel der Reise, die diese Buchung erfasst; nur bei Reisebuchungen
            gesetzt.
          example: Location B
        vehicle_id:
          type:
            - number
            - "null"
          description: Kennung des Fahrzeugs, das für die mit dieser Buchung erfasste
            Reise verwendet wurde.
          example: 3
        private:
          type:
            - boolean
            - "null"
          description: Ob die mit dieser Buchung erfasste Reise privaten Zwecken diente.
          example: true
        km:
          type:
            - number
            - "null"
          description: Zurückgelegte Strecke in Kilometern.
          example: 120
        passengers:
          type:
            - number
            - "null"
          description: Anzahl der Mitfahrer bei der mit dieser Buchung erfassten Reise.
          example: 2
        direction_of_travel:
          description: Richtung der mit dieser Buchung erfassten Reise (Hin- oder
            Rückfahrt).
          anyOf:
            - $ref: "#/components/schemas/AttendanceTravelDirection"
            - type: "null"
        work_location_id:
          type:
            - string
            - "null"
          description: Kennung des Einsatzorts des Projekts, an dem diese Buchung
            vorgenommen wurde.
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Buchung.
          example: Familienurlaub
      required:
        - employee_id
        - date
        - from
        - to
        - project_task_id
        - project_id
        - activity_id
      title: StoreAttendanceApiRequest
    StoreContactApiRequest:
      type: object
      description: Payload for adding a contact to a customer.
      properties:
        customer_number:
          type: string
          description: >-
            Die Kundennummer, zu der dieser Ansprechpartner gehört — wird
            automatisch aus der URL gesetzt, ein

            im Anfragekörper übergebener Wert wird ignoriert.
          example: K-12345
        salutation:
          type:
            - string
            - "null"
          description: Anrede des Ansprechpartners (z. B. Herr/Frau), wird in der
            Korrespondenz verwendet.
          maxLength: 255
          example: Frau
        first_name:
          type: string
          description: Vorname des Ansprechpartners.
          maxLength: 255
          example: Erika
        last_name:
          type: string
          description: Nachname des Ansprechpartners.
          maxLength: 255
          example: Mustermann
        email:
          type:
            - string
            - "null"
          format: email
          description: E-Mail-Adresse des Ansprechpartners.
          maxLength: 255
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Ansprechpartners.
          maxLength: 255
          example: +49 30 12345678
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Ansprechpartners.
          maxLength: 255
          example: +1-555-0124
        mobile:
          type:
            - string
            - "null"
          description: Mobilnummer des Ansprechpartners.
          maxLength: 255
          example: +49 170 1234567
        primary:
          description: Ob dieser Ansprechpartner der primäre Ansprechpartner des Kunden
            werden soll.
          anyOf:
            - $ref: "#/components/schemas/CustomerContactPrimary"
            - type: "null"
        department:
          type:
            - string
            - "null"
          description: Freitext-Abteilungsname für diesen Ansprechpartner — ohne Bezug zum
            Abteilungsmodul.
          maxLength: 255
          example: Einkauf
        job_title:
          type:
            - string
            - "null"
          description: Position des Ansprechpartners beim Kunden.
          maxLength: 255
          example: Leiterin Einkauf
        language:
          type:
            - string
            - "null"
          description: Bevorzugte Sprache des Ansprechpartners, wird für übersetzte
            Inhalte verwendet.
          maxLength: 255
          example: de
        inactive:
          type:
            - boolean
            - "null"
          description: Ob dieser Ansprechpartner als inaktiv markiert werden soll.
          example: false
        title:
          type:
            - string
            - "null"
          description: Akademischer Titel des Ansprechpartners (z. B. Dr.).
          maxLength: 255
          example: Dr.
        username:
          type:
            - string
            - "null"
          description: Der Benutzername, unter dem ein Portal-Login für diesen
            Ansprechpartner angelegt wird, falls gewünscht.
          maxLength: 32
          example: max.mustermann
        password:
          type:
            - string
            - "null"
          description: Das Passwort für den Portal-Login des Ansprechpartners, wenn ein
            Benutzername gesetzt ist.
          minLength: 4
          example: "1234"
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Ansprechpartner zugeordnet werden
            sollen.
          items:
            type: string
      required:
        - customer_number
        - first_name
        - last_name
      title: StoreContactApiRequest
    StoreCustomerApiRequest:
      type: object
      description: Payload for creating a customer.
      properties:
        customer_number:
          type: string
          description: Die eindeutige Kennung des Kunden — muss über alle Kunden hinweg
            eindeutig sein.
          maxLength: 32
          example: K-12345
        name:
          type: string
          description: Name des Kunden.
          maxLength: 120
          example: EU
        additional_name:
          type:
            - string
            - "null"
          description: Zusätzliche Namenszeile des Kunden, wird auf Dokumenten unter
            `name` gedruckt.
          maxLength: 120
          example: ACME Corp
        website:
          type:
            - string
            - "null"
          description: Website-URL des Kunden.
          maxLength: 120
          example: www.acme-corp.com
        email:
          type:
            - string
            - "null"
          format: email
          description: Allgemeine Kontakt-E-Mail-Adresse des Kunden.
          maxLength: 320
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Kunden.
          maxLength: 32
          example: +49 30 12345678
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Kunden.
          maxLength: 32
          example: +1-555-0124
        currency:
          type: string
          description: Der ISO-Währungscode, der für Angebote und Rechnungen dieses Kunden
            verwendet wird.
          example: EUR
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Notizen zum Kunden.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        industry:
          type:
            - string
            - "null"
          description: Name der Branche, der dieser Kunde angehört.
          maxLength: 32
          example: Technologie
        vat:
          type:
            - number
            - "null"
          description: Umsatzsteuersatz des Kunden in Prozent.
          example: 1.5
        tax_number:
          type:
            - string
            - "null"
          description: Die Steuernummer des Kunden.
          maxLength: 32
          example: DE123456789
        iban:
          type:
            - string
            - "null"
          description: IBAN des Kunden, wird für das SEPA-Lastschriftverfahren verwendet.
          maxLength: 34
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC des Kunden, wird zusammen mit `iban` für das
            SEPA-Lastschriftverfahren verwendet.
          maxLength: 11
          example: COBADEFFXXX
        payment_target:
          type:
            - integer
            - "null"
          description: Anzahl der Tage, die der Kunde zur Zahlung einer Rechnung hat,
            gerechnet ab Rechnungsdatum.
          example: 30
        payment_target_discount:
          type:
            - integer
            - "null"
          description: Anzahl der Tage, innerhalb derer dem Kunden bei Zahlung ein Skonto
            gewährt wird.
          example: 2
        inactive:
          type:
            - boolean
            - "null"
          description: Ob der Kunde als inaktiv markiert und aus den Listen aktiver Kunden
            ausgeblendet werden soll.
          example: false
        billing_procedure:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per Standardrechnung oder im Gutschriftverfahren
            (Self-Billing) abgerechnet wird.
          example: true
        automated_invoicing:
          type:
            - boolean
            - "null"
          description: Ob Rechnungen für diesen Kunden automatisch statt manuell erzeugt
            werden sollen.
          example: true
        debit_payment:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per SEPA-Lastschrift statt per Überweisung zahlt.
          example: false
        department_id:
          type: integer
          description: Die ID der Abteilung, der dieser Kunde zugeordnet ist. Ohne Angabe
            wird die Standardabteilung verwendet.
          example: 1
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Werte benutzerdefinierter dynamischer Attribute, die am Kunden
            gesetzt werden, mit dem Attributnamen als Schlüssel.
          items:
            type: array
            items:
              type: string
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Kunden zugeordnet werden sollen.
          items:
            type: string
        travel_expense_flat_per_day:
          type:
            - integer
            - "null"
          description: Welche Reisekostenpauschale pro Tag für diesen Kunden gilt, falls
            vorhanden.
          example: 1
        travel_expense_flat_per_journey:
          type:
            - integer
            - "null"
          description: Welche Reisekostenpauschale pro Fahrt für diesen Kunden gilt, falls
            vorhanden.
          example: 1
      required:
        - customer_number
        - name
        - currency
        - department_id
      title: StoreCustomerApiRequest
    StoreEmployeeRequest:
      type: object
      description: Payload for creating a new employee, including login credentials
        and contact/bank details.
      properties:
        username:
          type: string
          description: Eindeutiger Login-Name, unter dem der Mitarbeiter angelegt wird.
          minLength: 1
          maxLength: 32
          example: max.mustermann
        firstname:
          type: string
          description: Vorname des neuen Mitarbeiters.
          maxLength: 32
          example: Max
        lastname:
          type: string
          description: Nachname des neuen Mitarbeiters.
          maxLength: 64
          example: Mustermann
        email:
          type: string
          format: email
          description: Geschäftliche E-Mail-Adresse, unter der der neue Mitarbeiter
            eingeladen wird.
          maxLength: 64
          example: erika.mustermann@acme-corp.de
        personal_number:
          type:
            - string
            - "null"
          description: Personalnummer des Mitarbeiters, wie auf der Gehaltsabrechnung
            angegeben.
          maxLength: 32
          example: "1"
        birthdate:
          type:
            - string
            - "null"
          format: date-time
          description: Geburtsdatum des neuen Mitarbeiters.
          example: 1985-08-17T00:00:00.000000Z
        phone:
          type:
            - string
            - "null"
          description: Geschäftliche Festnetznummer.
          example: +49 30 12345678
        password:
          type: string
          description: Initiales Login-Passwort, wird bei fehlender Angabe zufällig erzeugt.
          maxLength: 64
          example: "1234"
        department_id:
          type:
            - integer
            - "null"
          description: Kennung der Abteilung, der der neue Mitarbeiter zugeordnet wird.
          example: 1
        rights:
          description: Rechtestufe, die dem neuen Mitarbeiter in der Anwendung gewährt wird.
          anyOf:
            - $ref: "#/components/schemas/EmployeeRights"
            - type: "null"
        employment:
          description: Art der Beschäftigung (festangestellt, freiberuflich, ...).
          anyOf:
            - $ref: "#/components/schemas/EmploymentType"
            - type: "null"
        price_group:
          type: string
          description: Preisgruppe, aus der die Abrechnungssätze des neuen Mitarbeiters
            abgeleitet werden.
          example: Junior-Entwickler
        oauth_username:
          type:
            - string
            - "null"
          description: Benutzername, mit dem der Mitarbeiter einer externen
            OAuth-Identität zugeordnet wird.
        salutation:
          description: Anrede (Herr, Frau, ...), die bei der Ansprache des Mitarbeiters
            verwendet wird.
          anyOf:
            - $ref: "#/components/schemas/Salutation"
            - type: "null"
        street:
          type:
            - string
            - "null"
          description: Straße und Hausnummer der Adresse des Mitarbeiters.
          maxLength: 64
          example: Musterstraße 30
        zip:
          type:
            - string
            - "null"
          description: Postleitzahl der Adresse des Mitarbeiters.
          maxLength: 32
          example: "71254"
        city:
          type:
            - string
            - "null"
          description: Ort der Adresse des Mitarbeiters.
          maxLength: 64
          example: Berlin
        country:
          type:
            - string
            - "null"
          description: Land der Adresse des Mitarbeiters.
          maxLength: 64
          example: Deutschland
        abbreviation:
          type:
            - string
            - "null"
          description: Kurzzeichen zur Identifikation des Mitarbeiters in kompakten
            Ansichten und Berichten.
          maxLength: 32
          example: MM
        title:
          type:
            - string
            - "null"
          description: Akademischer oder beruflicher Titel, sofern vorhanden.
          maxLength: 32
          example: Dr.
        mobile:
          type:
            - string
            - "null"
          description: Geschäftliche Mobilnummer.
          maxLength: 32
          example: +49 170 1234567
        fax:
          type:
            - string
            - "null"
          description: Geschäftliche Faxnummer.
          maxLength: 32
          example: +1-555-0124
        private_phone:
          type:
            - string
            - "null"
          description: Private Telefonnummer, getrennt von der geschäftlichen
            Telefonnummer geführt.
          maxLength: 32
          example: 07156 33958
        iban:
          type:
            - string
            - "null"
          description: IBAN (International Bank Account Number) für Erstattungen und
            Gehaltszahlungen.
          maxLength: 34
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC (Bank Identifier Code) der Bank des Mitarbeiters.
          maxLength: 11
          example: COBADEFFXXX
        account_no:
          type:
            - string
            - "null"
          description: Kontonummer, wird verwendet, wenn keine IBAN verfügbar ist.
          maxLength: 32
        bank_name:
          type:
            - string
            - "null"
          description: Name der Bank des Mitarbeiters.
          maxLength: 64
        bank_code:
          type:
            - string
            - "null"
          description: Bankleitzahl der Bank des Mitarbeiters.
          maxLength: 32
        currency:
          type:
            - string
            - "null"
          description: Währung, in der die Stundensätze und Erstattungen des Mitarbeiters
            angegeben sind.
          maxLength: 32
          example: EUR
        approval_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem die Daten/der Vertrag des Mitarbeiters genehmigt
            wurden.
        vat:
          type:
            - number
            - "null"
          description: Umsatzsteuersatz, der auf die abgerechneten Stundensätze des
            Mitarbeiters angewendet wird.
          example: 1.5
        personio_id:
          type:
            - string
            - "null"
          description: Kennung des Mitarbeiters im angebundenen Personio-HR-System, sofern
            verknüpft.
          maxLength: 32
        connector_external_ids:
          type:
            - array
            - "null"
          description: Externe Kennungen, mit denen dieser Mitarbeiter je Connector
            zugeordnet wird.
          items:
            type: string
        cost_bearer:
          type:
            - string
            - "null"
          description: Kostenstelle, auf die Zeiten und Auslagen des Mitarbeiters gebucht
            werden.
          maxLength: 32
        tax_id:
          type:
            - string
            - "null"
          description: Steueridentifikationsnummer des Mitarbeiters.
          maxLength: 32
        creditor_number:
          type:
            - string
            - "null"
          description: Kreditorennummer, die bei der Erstattung an den Mitarbeiter über
            die Buchhaltung verwendet wird.
          maxLength: 32
          example: "80033"
        cost_accounting_ads:
          type:
            - boolean
            - "null"
          description: Ob die Kostenrechnung des Mitarbeiters über ADS übermittelt wird.
          example: true
        categories:
          type:
            - array
            - "null"
          description: Kategorien, denen der neue Mitarbeiter zugeordnet wird.
          items:
            type: string
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Benutzerdefinierte dynamische Attribute, die am neuen Mitarbeiter
            gesetzt werden.
          items:
            type: array
            items:
              type: string
      required:
        - username
        - firstname
        - lastname
        - email
        - password
        - price_group
      title: StoreEmployeeRequest
    StoreEmploymentPeriodApiRequest:
      type: object
      description: Payload for creating a new employment period for an employee,
        including their leave entitlement.
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den dieser
            Beschäftigungszeitraum erfasst wird.
          maxLength: 32
          example: max.mustermann
        start_date:
          type: string
          format: date-time
          description: Erster Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt ist.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Letzter Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt ist, falls er endet.
          example: 2024-01-16T00:00:00.000000Z
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zum Beschäftigungszeitraum.
          maxLength: 255
          example: Familienurlaub
        annual_leave_entitlement:
          type: number
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter pro vollem
            Urlaubsjahr Anspruch hat.
          minimum: 0
          example: 30
        beginning_of_year:
          type:
            - string
            - "null"
          format: date-time
          description: Kalendertag, an dem das Urlaubsjahr für diesen
            Beschäftigungszeitraum beginnt.
          example: 2024-01-01T00:00:00.000000Z
        period_holiday_entitlement:
          type:
            - number
            - "null"
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter Anspruch hat,
            anteilig für diesen Zeitraum.
          minimum: 0
          example: 30
        is_holiday_per_year:
          type:
            - boolean
            - "null"
          description: >-
            Ob der Urlaubsanspruch pro Kalenderjahr und nicht pro
            Beschäftigungszeitraum

            angegeben ist.
          example: true
        day_absent_in_hours:
          type:
            - number
            - "null"
          description: Anzahl der Stunden, mit denen ein ganzer Fehltag für diesen
            Beschäftigungszeitraum gebucht wird.
          minimum: 0
          example: 8
      required:
        - employee_id
        - start_date
        - annual_leave_entitlement
      title: StoreEmploymentPeriodApiRequest
    StoreProjectApiRequest:
      type: object
      description: Payload for creating a project.
      properties:
        name:
          type: string
          description: Name des Projekts. Muss innerhalb des Mandanten eindeutig sein.
          maxLength: 64
          example: EU
        department_id:
          type: integer
          description: Kennung der Abteilung, der das Projekt zugeordnet ist.
          example: 1
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Projekts.
          maxLength: 255
          example: Angebot|en:offer
        start_date:
          type: string
          format: date
          description: Datum, an dem das Projekt beginnt.
          example: 2024-01-15
        end_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem das Projekt endet, sofern ein Ende festgelegt ist.
          example: 2024-01-16
        location_address:
          type:
            - string
            - "null"
          description: Straße und Hausnummer des Projektstandorts.
          maxLength: 64
        location_city:
          type:
            - string
            - "null"
          description: Ort des Projektstandorts.
          maxLength: 64
        location_state:
          type:
            - string
            - "null"
          description: Bundesland oder Region des Projektstandorts.
          maxLength: 64
        location_country:
          type:
            - string
            - "null"
          description: Land des Projektstandorts.
          maxLength: 32
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Kommentare zum Projekt.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        plan_expenses:
          type:
            - number
            - "null"
          description: Geplante Gesamtausgaben, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_hours:
          type:
            - number
            - "null"
          description: Geplante Gesamtstunden, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_wage:
          type:
            - number
            - "null"
          description: Geplante Gesamtlohnkosten, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_expenses_travel:
          type:
            - number
            - "null"
          description: Geplante Reisekosten, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        cost_object:
          type:
            - string
            - "null"
          description: Kostenträger, dem die Buchungen des Projekts zugeordnet werden.
          maxLength: 32
        plan_hours_done:
          type:
            - number
            - "null"
          description: Bereits auf das Projekt erfasste Stunden.
          example: 1.5
        plan_hours_invoiced:
          type:
            - number
            - "null"
          description: Bereits für das Projekt in Rechnung gestellte Stunden.
          example: 1.5
        customer_project_reference:
          type:
            - string
            - "null"
          description: Eigene Referenznummer des Kunden für dieses Projekt.
          maxLength: 64
        customer_billing_address_id:
          type:
            - integer
            - "null"
          description: Kennung der Kundenadresse, die für die Rechnungsstellung verwendet
            wird.
          example: 1
        customer_shipping_address_id:
          type:
            - integer
            - "null"
          description: Kennung der Kundenadresse, die für den Versand verwendet wird.
          example: 1
        has_multiple_customers:
          type:
            - boolean
            - "null"
          description: Ob das Projekt an mehr als einen Kunden abgerechnet werden kann.
          example: true
        cost_object_identifier:
          type:
            - integer
            - "null"
          description: Externe Kennung des Kostenträgers, wird für den Buchhaltungsexport
            verwendet.
          minimum: 0
          example: 1
        project_status_id:
          type:
            - string
            - "null"
          description: Kennung des aktuellen Projektstatus.
          maxLength: 64
          example: aktiv
        billing_type:
          description: "Wie das Projekt abgerechnet wird: Stundensatz, Tagessatz oder
            Pauschale."
          anyOf:
            - $ref: "#/components/schemas/BillingType"
            - type: "null"
        default_billability:
          description: Standard-Abrechenbarkeit, die auf neue Zeiteinträge in diesem
            Projekt angewendet wird.
          anyOf:
            - $ref: "#/components/schemas/DefaultBillability"
            - type: "null"
        receipts_billability:
          description: Standard-Abrechenbarkeit, die auf neue Belege in diesem Projekt
            angewendet wird.
          anyOf:
            - $ref: "#/components/schemas/ReceiptsBillability"
            - type: "null"
        currency:
          type:
            - string
            - "null"
          description: Währung, die für Geldbeträge in diesem Projekt verwendet wird.
          example: EUR
        language:
          description: Sprache, die für Dokumente dieses Projekts verwendet wird.
          anyOf:
            - $ref: "#/components/schemas/Language"
            - type: "null"
        url:
          type:
            - string
            - "null"
          description: Mit dem Projekt verknüpfte URL, zum Beispiel ein Link zu einem
            Kundenportal.
          maxLength: 255
          example: https://www.zep-online.de/zepinstanz/next/api/v1/articles?page=1
        reference_commission:
          type:
            - string
            - "null"
          description: Kommissionsreferenz des Kunden für dieses Projekt.
          maxLength: 100
        reference_procurement:
          type:
            - string
            - "null"
          description: Beschaffungsreferenz des Kunden für dieses Projekt.
          maxLength: 100
        reference_object:
          type:
            - string
            - "null"
          description: Objektreferenz des Kunden für dieses Projekt.
          maxLength: 100
        indicate_hours_for_daily_proof:
          type:
            - integer
            - "null"
          description: Ob das Stundenfeld auf dem Tagesnachweis angezeigt wird.
          example: 1
        indicate_remarks_for_daily_proof:
          type:
            - integer
            - "null"
          description: Ob das Bemerkungsfeld auf dem Tagesnachweis angezeigt wird.
          example: 1
        indicate_all_locations_per_day:
          type:
            - integer
            - "null"
          description: Ob alle Einsatzorte pro Tag auf dem Tagesnachweis aufgeführt werden.
          example: 1
        also_take_into_account_the_price_factors_for_hourly_rates:
          type:
            - integer
            - "null"
          description: Ob bei Stundensätzen zusätzlich die Preisfaktoren des Projekts
            berücksichtigt werden.
          example: 1
        indicate_all_activities_per_day:
          type:
            - integer
            - "null"
          description: Ob alle Tätigkeiten pro Tag auf dem Tagesnachweis aufgeführt werden.
          example: 1
        employee_name_time_report_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters im Stundennachweis
            angezeigt wird.
          example: 1
        employee_name_project_sales_volume_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters im Projektumsatzbericht
            angezeigt wird.
          example: 1
        employee_name_invoice_attachment_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters in der Rechnungsanlage
            angezeigt wird.
          example: 1
        travel_flat_rate:
          type:
            - number
            - "null"
          description: Pauschale, die für Reisen in diesem Projekt berechnet wird.
          example: 1.5
        reference_order:
          type:
            - string
            - "null"
          description: Bestellreferenz des Kunden für dieses Projekt.
          maxLength: 100
        billing_tasks:
          type:
            - boolean
            - "null"
          description: Ob die Vorgänge des Projekts jeweils eine eigene Abrechnungsart
            haben können.
          example: true
        revenue_account:
          type:
            - string
            - "null"
          description: Erlöskonto, auf das der Umsatz des Projekts gebucht wird.
          maxLength: 32
          example: "8400"
        plan_hours_children:
          type:
            - number
            - "null"
          description: Geplante Stunden, die über die Vorgänge des Projekts budgetiert sind.
          minimum: 0
          example: 1.5
        plan_hours_per_day:
          type:
            - number
            - "null"
          description: Geplante Stunden, die pro Tag für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_warning_percent:
          type:
            - number
            - "null"
          description: Prozentsatz des geplanten Budgets, bei dem eine Warnung ausgelöst
            wird.
          minimum: 0
          example: 1.5
        plan_warning_percent_2:
          type:
            - number
            - "null"
          description: Zweite Warnschwelle als Prozentsatz des geplanten Budgets.
          minimum: 0
          example: 1.5
        plan_warning_percent_3:
          type:
            - number
            - "null"
          description: Dritte Warnschwelle als Prozentsatz des geplanten Budgets.
          minimum: 0
          example: 1.5
        plan_can_exceed:
          description: Ob erfasste Stunden das geplante Budget überschreiten dürfen.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        keywords:
          type:
            - array
            - "null"
          description: Freitext-Schlagwörter zur Suche nach dem Projekt.
          items:
            type: string
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Dynamische Attribute, die für das Projekt konfiguriert werden.
          items:
            type: array
            items:
              type: string
        categories:
          type:
            - array
            - "null"
          description: Kategorien, die dem Projekt zugeordnet werden.
          items:
            type: string
        customer_id:
          type:
            - integer
            - "null"
          description: Kennung des Kunden, zu dem dieses Projekt gehört.
          example: 1
        customer_contact_id:
          type:
            - integer
            - "null"
          description: Kennung des für dieses Projekt verantwortlichen Ansprechpartners.
          example: 789
      required:
        - name
        - department_id
        - start_date
      title: StoreProjectApiRequest
    StoreProjectTaskApiRequest:
      type: object
      description: Payload for creating a task within a project.
      properties:
        project_id:
          type: integer
          description: Kennung des Projekts, zu dem dieser Vorgang gehört.
          example: 16
        name:
          type: string
          description: Name des Vorgangs.
          maxLength: 64
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Vorgangs.
          example: Angebot|en:offer
        status_id:
          type: string
          description: Kennung des Status des Vorgangs.
        billing_type:
          description: "Wie der Vorgang abgerechnet wird: Stundensatz, Tagessatz,
            Pauschale oder wie das Projekt."
          anyOf:
            - $ref: "#/components/schemas/ProjectTaskBillingType"
            - type: "null"
        start_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem der Vorgang beginnt.
          example: 2024-01-15
        end_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem der Vorgang endet.
          example: 2024-01-16
        parent_id:
          type:
            - integer
            - "null"
          description: Kennung des übergeordneten Vorgangs, bei einem Vorgang, der unter
            einem anderen eingeordnet ist.
          example: 1
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Dynamische Attribute, die für den Vorgang konfiguriert werden.
          items:
            type: array
            items:
              type: string
      required:
        - project_id
        - name
        - status_id
      title: StoreProjectTaskApiRequest
    StoreReceiptRequest:
      type: object
      description: >-
        Payload for booking a new receipt: the expense details, its project/task
        assignment, and the

        tax-rate-and-amount breakdown carried in receiptAmounts.
      properties:
        id:
          type:
            - integer
            - "null"
          description: Der zu aktualisierende Beleg; entfällt beim Anlegen eines neuen
            Belegs.
          example: 1
        employee_id:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, für den dieser Beleg gebucht wird.
          maxLength: 255
          example: max.mustermann
        date:
          type: string
          format: date-time
          description: Das Datum, an dem die Ausgabe erfasst wurde.
          example: 2024-07-20T00:00:00.000000Z
        performance_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Leistung oder Ausgabe
            tatsächlich stattgefunden hat, falls es vom Buchungsdatum abweicht.
          example: 2024-11-15
        receipt_type_id:
          type: string
          description: Die Belegart, unter der diese Ausgabe gebucht ist, z. B. Reise oder
            Mahlzeit.
          maxLength: 255
          example: Fahrkarte
        project_id:
          type: integer
          description: Das Projekt, auf das dieser Beleg gebucht ist.
          example: 16
        project_task_id:
          type:
            - integer
            - "null"
          description: Der Vorgang, auf den dieser Beleg gebucht wird; muss zum
            angegebenen Projekt gehören.
          example: 1
        payment_method:
          type: string
          description: Wie die Ausgabe bezahlt wurde — z. B. bar, Firmenkarte oder Rechnung.
          maxLength: 255
          example: privat
        currency:
          type: string
          description: Der dreistellige Währungscode, in dem die nachfolgenden
            Betragsfelder angegeben sind.
          maxLength: 32
          example: EUR
        is_amount_net:
          type: boolean
          description: Ob die Beträge in receiptAmounts Nettobeträge (ohne Steuer) statt
            Bruttobeträge sind.
          example: false
        is_invoice_amount_net:
          type:
            - boolean
            - "null"
          description: Ob der fakturierbare Betrag ein Nettobetrag (ohne Steuer) ist;
            erforderlich, sobald eine Zeile einen invoicing_share enthält.
          example: false
        note:
          type:
            - string
            - "null"
          description: Eine Freitextnotiz zum Beleg.
          maxLength: 255
          example: Familienurlaub
        receiptAmounts:
          type: array
          description: "Die Aufschlüsselung dieses Belegs nach Steuersatz und Betrag: ein
            Eintrag pro Mehrwertsteuersatz, auf den der Betrag aufgeteilt ist."
          items:
            type: object
            properties:
              tax:
                type: number
                description: >-
                  Der Mehrwertsteuersatz dieser Zeile in Prozent. Muss einer der
                  Steuersätze sein, die die

                  Belegart zulässt.
                minimum: 0
                maximum: 100
              quantity:
                type: number
                description: Wie viele Einheiten diese Zeile umfasst.
                minimum: 1
              amount:
                type: number
                description: Der Betrag der Zeile zum oben angegebenen Mehrwertsteuersatz.
                minimum: 0
              private_share:
                type:
                  - number
                  - "null"
                description: Der Teil des Betrags, der privat getragen und nicht erstattet wird.
                minimum: 0
              invoicing_share:
                type:
                  - number
                  - "null"
                description: >-
                  Der Teil des Betrags, der an den Kunden weiterberechnet wird.
                  Wird ignoriert, sofern das Projekt

                  nicht die Abrechnung von Belegen erlaubt.
                minimum: 0
            required:
              - tax
              - quantity
              - amount
          minItems: 1
      required:
        - date
        - receipt_type_id
        - project_id
        - payment_method
        - currency
        - is_amount_net
        - receiptAmounts
      title: StoreReceiptRequest
    StoreRegularWorkingTimeApiRequst:
      type: object
      description: Payload for creating a new regular working-time schedule (planned
        hours per weekday or per month) for an employee.
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Regelarbeitszeit gilt.
          maxLength: 32
          example: max.mustermann
        start_date:
          description: Kalendertag, ab dem diese Regelarbeitszeit gilt.
          anyOf:
            - type: string
              format: date-time
            - type:
                - string
                - "null"
              format: date-time
          example: 2024-01-15T00:00:00.000000Z
        monday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Montag.
          minimum: 0
          example: 8
        tuesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Dienstag.
          minimum: 0
          example: 8
        wednesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Mittwoch.
          minimum: 0
          example: 4
        thursday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Donnerstag.
          minimum: 0
          example: 8
        friday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Freitag.
          minimum: 0
          example: 6
        saturday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Samstag.
          minimum: 0
          example: 0
        sunday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Sonntag.
          minimum: 0
          example: 0
        monday_workday:
          type:
            - boolean
            - "null"
          description: Ob Montag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        tuesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Dienstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        wednesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Mittwoch in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        thursday_workday:
          type:
            - boolean
            - "null"
          description: Ob Donnerstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        friday_workday:
          type:
            - boolean
            - "null"
          description: Ob Freitag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        saturday_workday:
          type:
            - boolean
            - "null"
          description: Ob Samstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        sunday_workday:
          type:
            - boolean
            - "null"
          description: Ob Sonntag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        is_monthly:
          type:
            - boolean
            - "null"
          description: Ob die Regelarbeitszeit als Monatssumme statt pro Wochentag
            definiert ist.
          example: true
        monthly_hours:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden pro Monat, nur verwendet, wenn die
            Regelarbeitszeit monatlich definiert ist.
          minimum: 0
          example: 150.34
        max_hours_in_month:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Monat gemäß dieser
            Regelarbeitszeit.
          minimum: 0
          example: 137.51
        max_hours_in_week:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Woche gemäß dieser
            Regelarbeitszeit.
          minimum: 0
          example: 74.25
        break_regulation_type_id:
          type:
            - integer
            - "null"
          description: Kennung der Pausenregelung, die auf diese Regelarbeitszeit
            angewendet wird.
          example: 1
        holiday_calendar_id:
          type:
            - integer
            - "null"
          description: Kennung des Feiertagskalenders, aus dem die gesetzlichen Feiertage
            dieser Regelarbeitszeit stammen.
          example: 1
      required:
        - employee_id
      title: StoreRegularWorkingTimeApiRequst
    Subtask:
      type: object
      properties:
        id:
          type: integer
          description: Die eindeutige Kennung der Teilaufgabe.
          example: 1
        name:
          type: string
          description: Der Kurzname der Teilaufgabe.
          example: EU
        ticket_id:
          type: integer
          description: Die ID des Tickets, zu dem diese Teilaufgabe gehört.
          example: 1234
        date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Teilaufgabe erstellt wurde.
          example: 2024-07-20T00:00:00.000000Z
        creator_username:
          type: string
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe angelegt hat.
          example: max.mustermann
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe aktuell
            bearbeitet.
          example: frank
        subject:
          type: string
          description: Die Betreffzeile der Teilaufgabe.
          example: Fehler in der Benutzeroberfläche beheben
        status:
          type: object
          description: Der Bearbeitungsstatus der Teilaufgabe (z. B. neu, in Bearbeitung,
            erledigt) — dieselben Zustände wie bei einem Ticket.
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - neu
                - in Bearbeitung
                - fertig
                - abgelehnt
                - bewilligt
                - billed
          required:
            - id
            - name
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist.
          example: 2024-11-15
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit an der Teilaufgabe planmäßig beginnen
            soll.
          example: 2024-01-15T00:00:00.000000Z
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem die Teilaufgabe abgeschlossen sein soll.
          example: 2024-11-20
        processing_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Teilaufgabe in Bearbeitung genommen wurde.
          example: 2024-02-28 14:09:38
        done_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Teilaufgabe als erledigt markiert wurde.
          example: 2024-02-28 14:11:38
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für diese Teilaufgabe geplanten Stunden.
          example: 1.5
        prevent_overbooking:
          description: Ob die erfasste Zeit für diese Teilaufgabe die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          allOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
          example: 0
        history_modified:
          type: string
          format: date-time
          description: Wann der jüngste Verlaufseintrag der Teilaufgabe erfasst wurde.
          example: 2024-03-12 08:23:54
        keywords:
          type:
            - object
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Teilaufgaben.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Datensatz der Teilaufgabe erstellt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Datensatz der Teilaufgabe zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
        customer_contact_person_id:
          type:
            - integer
            - "null"
          description: Die ID des Ansprechpartners, von dem oder für den diese Teilaufgabe
            erstellt wurde.
          example: 1
        history_creator_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der den ersten Verlaufseintrag
            der Teilaufgabe angelegt hat.
          example: max.mustermann
      required:
        - id
        - name
        - ticket_id
        - date
        - creator_username
        - processor_username
        - subject
        - status
        - receipt_date
        - start_date
        - deadline
        - processing_date
        - done_date
        - planned_hours
        - prevent_overbooking
        - history_modified
        - keywords
        - created
        - modified
        - customer_contact_person_id
        - history_creator_username
      title: SubtaskResource
    SubtaskStoreRequest:
      type: object
      description: Payload for creating a subtask on a ticket.
      properties:
        subject:
          type: string
          description: Die Betreffzeile der Teilaufgabe.
          maxLength: 255
          example: Fehler in der Benutzeroberfläche beheben
        name:
          type: string
          description: Der Kurzname der Teilaufgabe.
          maxLength: 255
          example: EU
        customer_reference:
          type:
            - string
            - "null"
          description: Eine vom Kunden angegebene Freitext-Referenznummer für diese
            Teilaufgabe.
          maxLength: 255
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit an der Teilaufgabe planmäßig beginnen
            soll.
          example: 2024-01-15T00:00:00.000000Z
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist.
          example: 2024-11-15
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem die Teilaufgabe abgeschlossen sein soll.
          example: 2024-11-20
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für diese Teilaufgabe geplanten Stunden.
          example: 1.5
        prevent_overbooking:
          description: Ob die erfasste Zeit für diese Teilaufgabe die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        creator_username:
          type: string
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe angelegt hat.
          example: max.mustermann
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe aktuell
            bearbeitet.
          example: frank
        status:
          description: Der Zielstatus der Teilaufgabe.
          allOf:
            - $ref: "#/components/schemas/TicketStatusEnum"
        categories:
          type: array
          description: Die IDs der Kategorien, die der Teilaufgabe zugeordnet werden sollen.
          items:
            type: string
          minItems: 1
        keywords:
          type:
            - string
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Teilaufgaben.
          maxLength: 255
          example: modi
        customer_contact_person:
          type:
            - string
            - "null"
          format: email
          description: Die E-Mail-Adresse des Ansprechpartners, den diese Teilaufgabe
            betrifft, falls vorhanden.
      required:
        - subject
        - name
        - creator_username
        - status
        - categories
      title: SubtaskStoreRequest
    SubtaskUpdateRequest:
      type: object
      description: >-
        Payload for updating an existing subtask. Fields omitted from the
        request keep the subtask's

        current value.
      properties:
        subject:
          type: string
          description: Die Betreffzeile der Teilaufgabe.
          maxLength: 255
          example: Fehler in der Benutzeroberfläche beheben
        name:
          type: string
          description: Der Kurzname der Teilaufgabe.
          maxLength: 255
          example: EU
        customer_reference:
          type:
            - string
            - "null"
          description: Eine vom Kunden angegebene Freitext-Referenznummer für diese
            Teilaufgabe.
          maxLength: 255
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit an der Teilaufgabe planmäßig beginnen
            soll.
          example: 2024-01-15T00:00:00.000000Z
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist.
          example: 2024-11-15
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem die Teilaufgabe abgeschlossen sein soll.
          example: 2024-11-20
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für diese Teilaufgabe geplanten Stunden.
          example: 1.5
        prevent_overbooking:
          description: Ob die erfasste Zeit für diese Teilaufgabe die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        creator_username:
          type: string
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe angelegt hat.
          example: max.mustermann
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der die Teilaufgabe aktuell
            bearbeitet.
          example: frank
        status:
          description: Der Zielstatus der Teilaufgabe.
          allOf:
            - $ref: "#/components/schemas/TicketStatusEnum"
        categories:
          type: array
          description: Die IDs der Kategorien, die der Teilaufgabe zugeordnet werden sollen.
          items:
            type: string
          minItems: 1
        keywords:
          type:
            - string
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Teilaufgaben.
          maxLength: 255
          example: modi
        customer_contact_person:
          type:
            - string
            - "null"
          format: email
          description: Die E-Mail-Adresse des Ansprechpartners, den diese Teilaufgabe
            betrifft, falls vorhanden.
      required:
        - subject
        - name
        - creator_username
        - status
        - categories
      title: SubtaskUpdateRequest
    Ticket:
      type: object
      properties:
        id:
          type: integer
          description: Die eindeutige Kennung des Tickets.
          example: 1
        subject:
          type: string
          description: Die Betreffzeile des Tickets.
          example: Fehler in der Benutzeroberfläche beheben
        priority:
          type: integer
          description: >-
            Die Priorität des Tickets, eine Ganzzahl von 1 bis 5. ZEP-Instanzen
            können eigene

            Bezeichnungen für diese Werte festlegen, daher ist keine feste
            Bedeutung pro Zahl garantiert.
          example: 3
        status:
          type: object
          description: Der Bearbeitungsstatus des Tickets (z. B. neu, in Bearbeitung,
            erledigt).
          properties:
            id:
              type: integer
              description: Der gespeicherte Wert. Vergleichen Sie gegen diesen, nicht gegen
                name.
            name:
              type: string
              description: Die lesbare Bezeichnung in der Sprache des Mandanten. Nicht parsen.
              enum:
                - neu
                - in Bearbeitung
                - fertig
                - abgelehnt
                - bewilligt
                - billed
          required:
            - id
            - name
        creator_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der das Ticket angelegt hat.
          example: max.mustermann
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der das Ticket aktuell bearbeitet.
          example: frank
        date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket erstellt wurde.
          example: 2024-07-20T00:00:00.000000Z
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist (z.
            B. per E-Mail).
          example: 2024-11-15
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit am Ticket planmäßig beginnen soll.
          example: 2024-01-15T00:00:00.000000Z
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem das Ticket abgeschlossen sein soll.
          example: 2024-11-20
        processing_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket in Bearbeitung genommen wurde.
          example: 2024-02-28 14:09:38
        done_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket als erledigt markiert wurde.
          example: 2024-02-28 14:11:38
        approved_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket genehmigt wurde.
          example: 2024-03-12 08:23:54
        rejected_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket abgelehnt wurde.
        billed_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem das Ticket abgerechnet wurde.
          example: 2024-05-31T00:00:00.000000Z
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für dieses Ticket geplanten Stunden.
          example: 1.5
        prevent_overbooking:
          description: Ob die erfasste Zeit für dieses Ticket die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          allOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
          example: 0
        history_modified:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der jüngste Verlaufseintrag des Tickets (Kommentar oder
            Statusänderung) erfasst wurde.
          example: 2024-03-12 08:23:54
        project_id:
          type: integer
          description: Die ID des Projekts, zu dem dieses Ticket gehört.
          example: 16
        project_task_id:
          type: integer
          description: Die ID des Vorgangs (PSP-Element), auf den dieses Ticket gebucht
            wird.
          example: 1
        notify_of_completion:
          type:
            - boolean
            - "null"
          description: Ob der Ersteller des Tickets per E-Mail benachrichtigt wird, wenn
            das Ticket als erledigt markiert wird.
          example: true
        customer_contact_person_id:
          type:
            - integer
            - "null"
          description: Die ID des Ansprechpartners, von dem oder für den dieses Ticket
            erstellt wurde.
          example: 1
        history_creator_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der den ersten Verlaufseintrag
            des Tickets angelegt hat.
          example: max.mustermann
        customer_reference:
          type:
            - string
            - "null"
          description: Eine vom Kunden angegebene Freitext-Referenznummer für dieses Ticket.
        external_ticket_number:
          type:
            - string
            - "null"
          description: Eine Ticketnummer aus einem externen System, der dieses Ticket
            entspricht.
        from_mail:
          type:
            - string
            - "null"
          description: Die Absender-E-Mail-Adresse, falls das Ticket aus einer eingehenden
            E-Mail erstellt wurde.
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Datensatz des Tickets erstellt wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Wann der Datensatz des Tickets zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
        keywords:
          type:
            - object
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Tickets.
        categories:
          type: array
          description: >-
            Die diesem Ticket zugeordneten Kategorien. Nur bei GET
            /tickets/{ticket} enthalten; nicht

            im Listen-Endpunkt GET /tickets.
          items:
            $ref: "#/components/schemas/Category"
      required:
        - id
        - subject
        - priority
        - status
        - creator_username
        - processor_username
        - date
        - receipt_date
        - start_date
        - deadline
        - processing_date
        - done_date
        - approved_date
        - rejected_date
        - billed_date
        - planned_hours
        - prevent_overbooking
        - history_modified
        - project_id
        - project_task_id
        - notify_of_completion
        - customer_contact_person_id
        - history_creator_username
        - customer_reference
        - external_ticket_number
        - from_mail
        - created
        - modified
        - keywords
      title: TicketResource
    TicketStatusEnum:
      type: integer
      description: >
        The lifecycle stage of a ticket or subtask: new, in process, done,
        rejected, approved, or billed.
      enum:
        - 1
        - 2
        - 3
        - 4
        - 5
        - 8
      title: TicketStatusEnum
    TicketStoreRequest:
      type: object
      description: Payload for creating a ticket.
      properties:
        status:
          description: Der Zielstatus des Tickets.
          allOf:
            - $ref: "#/components/schemas/TicketStatusEnum"
        project_id:
          type: integer
          description: Die ID des Projekts, auf das dieses Ticket gebucht wird.
          example: 16
        project_task_id:
          type: integer
          description: Die ID des Vorgangs (PSP-Element), auf den dieses Ticket gebucht
            wird.
          example: 1
        priority:
          type: integer
          description: Die Priorität des Tickets, von 1 (höchste) bis 5 (niedrigste).
          minimum: 1
          maximum: 5
          example: 3
        subject:
          type: string
          description: Die Betreffzeile des Tickets.
          maxLength: 255
          example: Fehler in der Benutzeroberfläche beheben
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für dieses Ticket geplanten Stunden.
          example: 1.5
        creator_username:
          type:
            - string
            - "null"
          description: >-
            Der Benutzername des Mitarbeiters, der das Ticket angelegt hat.
            Erforderlich, sofern nicht

            stattdessen ein Ansprechpartner angegeben wird.
          example: max.mustermann
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist.
          example: 2024-11-15
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der das Ticket aktuell bearbeitet.
          example: frank
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit am Ticket planmäßig beginnen soll.
          example: 2024-01-15T00:00:00.000000Z
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem das Ticket abgeschlossen sein soll.
          example: 2024-11-20
        from_mail:
          type:
            - string
            - "null"
          description: >-
            Die Absender-E-Mail-Adresse, falls das Ticket aus einer eingehenden
            E-Mail erstellt wird — in der Regel

            automatisch ermittelt, siehe \CreateMailTicketsTask::createTicket.
        external_ticket_number:
          type:
            - string
            - "null"
          description: Eine Ticketnummer aus einem externen System, der dieses Ticket
            entspricht.
          maxLength: 255
        notify_of_completion:
          type:
            - boolean
            - "null"
          description: Ob der Ersteller des Tickets per E-Mail benachrichtigt wird, wenn
            das Ticket als erledigt markiert wird.
          example: true
        prevent_overbooking:
          description: Ob die erfasste Zeit für dieses Ticket die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        customer_contact_person:
          type:
            - string
            - "null"
          format: email
          description: >-
            Die E-Mail-Adresse des Ansprechpartners, der dieses Ticket erstellt.
            Erforderlich,

            sofern nicht stattdessen ein Ersteller-Benutzername angegeben wird.
        customer_reference:
          type:
            - string
            - "null"
          description: Eine vom Kunden angegebene Freitext-Referenznummer für dieses Ticket.
          maxLength: 255
        keywords:
          type:
            - string
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Tickets.
          maxLength: 255
          example: modi
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Ticket zugeordnet werden sollen.
          items:
            type:
              - string
              - "null"
      required:
        - status
        - project_id
        - project_task_id
        - priority
        - subject
      title: TicketStoreRequest
    TicketUpdateRequest:
      type: object
      description: >-
        Payload for updating an existing ticket. Fields omitted from the request
        keep the ticket's

        current value.
      properties:
        status:
          description: Der Zielstatus des Tickets.
          allOf:
            - $ref: "#/components/schemas/TicketStatusEnum"
        project_id:
          type: integer
          description: Die ID des Projekts, auf das dieses Ticket gebucht wird.
          example: 16
        project_task_id:
          type: integer
          description: Die ID des Vorgangs (PSP-Element), auf den dieses Ticket gebucht
            wird.
          example: 1
        priority:
          type: integer
          description: Die Priorität des Tickets, von 1 (höchste) bis 5 (niedrigste).
          minimum: 1
          maximum: 5
          example: 3
        subject:
          type: string
          description: Die Betreffzeile des Tickets.
          maxLength: 255
          example: Fehler in der Benutzeroberfläche beheben
        planned_hours:
          type:
            - number
            - "null"
          description: Die Anzahl der für dieses Ticket geplanten Stunden.
          example: 1.5
        creator_username:
          type:
            - string
            - "null"
          description: >-
            Der Benutzername des Mitarbeiters, der das Ticket angelegt hat.
            Erforderlich, sofern nicht

            stattdessen ein Ansprechpartner angegeben wird.
          example: max.mustermann
        receipt_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Anfrage eingegangen ist.
          example: 2024-11-15
        processor_username:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, der das Ticket aktuell bearbeitet.
          example: frank
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die Arbeit am Ticket planmäßig beginnen soll.
          example: 2024-01-15T00:00:00.000000Z
        deadline:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, bis zu dem das Ticket abgeschlossen sein soll.
          example: 2024-11-20
        from_mail:
          type:
            - string
            - "null"
          description: >-
            Die Absender-E-Mail-Adresse, falls das Ticket aus einer eingehenden
            E-Mail erstellt wird — in der Regel

            automatisch ermittelt, siehe \CreateMailTicketsTask::createTicket.
        external_ticket_number:
          type:
            - string
            - "null"
          description: Eine Ticketnummer aus einem externen System, der dieses Ticket
            entspricht.
          maxLength: 255
        notify_of_completion:
          type:
            - boolean
            - "null"
          description: Ob der Ersteller des Tickets per E-Mail benachrichtigt wird, wenn
            das Ticket als erledigt markiert wird.
          example: true
        prevent_overbooking:
          description: Ob die erfasste Zeit für dieses Ticket die geplanten Stunden
            überschreiten darf, und für welche Zeitarten.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        customer_contact_person:
          type:
            - string
            - "null"
          format: email
          description: >-
            Die E-Mail-Adresse des Ansprechpartners, der dieses Ticket erstellt.
            Erforderlich,

            sofern nicht stattdessen ein Ersteller-Benutzername angegeben wird.
        customer_reference:
          type:
            - string
            - "null"
          description: Eine vom Kunden angegebene Freitext-Referenznummer für dieses Ticket.
          maxLength: 255
        keywords:
          type:
            - string
            - "null"
          description: Freitext-Schlagwörter, kommagetrennt, zum Suchen und Filtern von
            Tickets.
          maxLength: 255
          example: modi
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Ticket zugeordnet werden sollen.
          items:
            type:
              - string
              - "null"
      required:
        - status
        - project_id
        - project_task_id
        - priority
        - subject
      title: TicketUpdateRequest
    Transponder:
      type: object
      properties:
        rfid:
          type: string
          description: Seriennummer des physischen RFID-Transponders.
          example: 0458B5FA
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, dem dieser Transponder zugeordnet ist.
          example: max.mustermann
        created:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem der Transponder registriert wurde.
          example: 2024-07-20T11:30:00.000000Z
        modified:
          type:
            - string
            - "null"
          format: date-time
          description: Zeitstempel, zu dem der Transponder zuletzt geändert wurde.
          example: 2024-07-20T12:30:00.000000Z
      required:
        - rfid
        - employee_id
        - created
        - modified
      title: TransponderResource
    UpdateAttendanceApiRequest:
      type: object
      description: Payload for updating an existing attendance booking. Unset fields
        keep their current value.
      properties:
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Buchung erfasst wird.
          example: max.mustermann
        date:
          type: string
          format: date
          description: Kalendertag, zu dem die Buchung gehört.
          example: 2024-07-20
        from:
          type: string
          description: Uhrzeit, zu der die Buchung beginnt.
        to:
          type: string
          description: Uhrzeit, zu der die Buchung endet. Der Wert 00:00 kennzeichnet eine
            Buchung, die über Mitternacht hinausgeht.
        duration:
          type:
            - number
            - "null"
          description: Gebuchte Dauer in Stunden, erforderlich, wenn die Zeiterfassung nur
            die Dauer erfasst.
          example: 1.5
        locked:
          type:
            - boolean
            - "null"
          description: Ob die Buchung gegen weitere Änderungen gesperrt ist.
          example: false
        is_travel:
          type:
            - boolean
            - "null"
          description: Ob die Buchung Reisezeit statt regulärer Arbeit darstellt.
          example: false
        billable:
          type:
            - boolean
            - "null"
          description: Ob die gebuchte Zeit gegenüber dem Kunden abrechenbar ist.
          example: true
        work_location_is_project_relevant:
          type:
            - boolean
            - "null"
          description: Ob der Arbeitsort dafür relevant ist, ob diese Buchung als
            abrechenbar gilt.
          example: true
        color:
          type:
            - string
            - "null"
          description: Anzeigefarbe, mit der die Buchung in Kalenderansichten
            hervorgehoben wird.
          pattern: ^#[0-9A-F]{6}$
          example: "#664599"
        project_task_id:
          type: number
          description: Kennung des Vorgangs, auf den die gebuchte Zeit erfasst wird.
          example: 1.5
        project_id:
          type: number
          description: Kennung des Projekts, auf das die gebuchte Zeit erfasst wird.
          example: 16
        activity_id:
          type: string
          description: Kennung der während der Buchung ausgeführten Tätigkeit.
          example: im
        start:
          type:
            - string
            - "null"
          description: Startpunkt der Reise, die diese Buchung erfasst; nur bei
            Reisebuchungen gesetzt.
          example: Location A
        destination:
          type:
            - string
            - "null"
          description: Ziel der Reise, die diese Buchung erfasst; nur bei Reisebuchungen
            gesetzt.
          example: Location B
        vehicle_id:
          type:
            - number
            - "null"
          description: Kennung des Fahrzeugs, das für die mit dieser Buchung erfasste
            Reise verwendet wurde.
          example: 3
        private:
          type:
            - boolean
            - "null"
          description: Ob die mit dieser Buchung erfasste Reise privaten Zwecken diente.
          example: true
        km:
          type:
            - number
            - "null"
          description: Zurückgelegte Strecke in Kilometern.
          example: 120
        passengers:
          type:
            - number
            - "null"
          description: Anzahl der Mitfahrer bei der mit dieser Buchung erfassten Reise.
          example: 2
        direction_of_travel:
          description: Richtung der mit dieser Buchung erfassten Reise (Hin- oder
            Rückfahrt).
          anyOf:
            - $ref: "#/components/schemas/AttendanceTravelDirection"
            - type: "null"
        work_location_id:
          type:
            - string
            - "null"
          description: Kennung des Einsatzorts des Projekts, an dem diese Buchung
            vorgenommen wurde.
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zur Buchung.
          example: Familienurlaub
      required:
        - employee_id
        - date
        - from
        - to
        - project_task_id
        - project_id
        - activity_id
      title: UpdateAttendanceApiRequest
    UpdateContactApiRequest:
      type: object
      description: >-
        Payload for updating an existing customer contact. All fields are
        optional; omitted fields are

        left unchanged.
      properties:
        salutation:
          type:
            - string
            - "null"
          description: Anrede des Ansprechpartners (z. B. Herr/Frau), wird in der
            Korrespondenz verwendet.
          maxLength: 255
          example: Frau
        first_name:
          type: string
          description: Vorname des Ansprechpartners.
          maxLength: 255
          example: Erika
        last_name:
          type: string
          description: Nachname des Ansprechpartners.
          maxLength: 255
          example: Mustermann
        email:
          type:
            - string
            - "null"
          format: email
          description: E-Mail-Adresse des Ansprechpartners.
          maxLength: 255
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Ansprechpartners.
          maxLength: 255
          example: +49 30 12345678
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Ansprechpartners.
          maxLength: 255
          example: +1-555-0124
        mobile:
          type:
            - string
            - "null"
          description: Mobilnummer des Ansprechpartners.
          maxLength: 255
          example: +49 170 1234567
        primary:
          description: Ob dieser Ansprechpartner der primäre Ansprechpartner des Kunden
            werden soll.
          anyOf:
            - $ref: "#/components/schemas/CustomerContactPrimary"
            - type: "null"
        department:
          type:
            - string
            - "null"
          description: Freitext-Abteilungsname für diesen Ansprechpartner — ohne Bezug zum
            Abteilungsmodul.
          maxLength: 255
          example: Einkauf
        job_title:
          type:
            - string
            - "null"
          description: Position des Ansprechpartners beim Kunden.
          maxLength: 255
          example: Leiterin Einkauf
        language:
          type:
            - string
            - "null"
          description: Bevorzugte Sprache des Ansprechpartners, wird für übersetzte
            Inhalte verwendet.
          maxLength: 255
          example: de
        inactive:
          type:
            - boolean
            - "null"
          description: Ob dieser Ansprechpartner als inaktiv markiert werden soll.
          example: false
        title:
          type:
            - string
            - "null"
          description: Akademischer Titel des Ansprechpartners (z. B. Dr.).
          maxLength: 255
          example: Dr.
        username:
          type:
            - string
            - "null"
          description: Der Benutzername des Portal-Logins des Ansprechpartners, falls
            vorhanden.
          maxLength: 32
          example: max.mustermann
        password:
          type:
            - string
            - "null"
          description: Das Passwort für den Portal-Login des Ansprechpartners, wenn ein
            Benutzername gesetzt ist.
          minLength: 4
          example: "1234"
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Ansprechpartner zugeordnet werden
            sollen.
          items:
            type: string
      title: UpdateContactApiRequest
    UpdateCustomerApiRequest:
      type: object
      description: >-
        Payload for updating an existing customer. All fields are optional;
        omitted fields are left

        unchanged.
      properties:
        customer_number:
          type: string
          description: Die eindeutige Kennung des Kunden.
          maxLength: 32
          example: K-12345
        name:
          type: string
          description: Name des Kunden.
          maxLength: 120
          example: EU
        additional_name:
          type:
            - string
            - "null"
          description: Zusätzliche Namenszeile des Kunden, wird auf Dokumenten unter
            `name` gedruckt.
          maxLength: 120
          example: ACME Corp
        website:
          type:
            - string
            - "null"
          description: Website-URL des Kunden.
          maxLength: 120
          example: www.acme-corp.com
        email:
          type:
            - string
            - "null"
          format: email
          description: Allgemeine Kontakt-E-Mail-Adresse des Kunden.
          maxLength: 320
          example: erika.mustermann@acme-corp.de
        phone:
          type:
            - string
            - "null"
          description: Telefonnummer des Kunden.
          maxLength: 32
          example: +49 30 12345678
        fax:
          type:
            - string
            - "null"
          description: Faxnummer des Kunden.
          maxLength: 32
          example: +1-555-0124
        currency:
          type: string
          description: Der ISO-Währungscode, der für Angebote und Rechnungen dieses Kunden
            verwendet wird.
          example: EUR
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Notizen zum Kunden.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        industry:
          type:
            - string
            - "null"
          description: Name der Branche, der dieser Kunde angehört.
          maxLength: 32
          example: Technologie
        vat:
          type:
            - number
            - "null"
          description: Umsatzsteuersatz des Kunden in Prozent.
          example: 1.5
        tax_number:
          type:
            - string
            - "null"
          description: Die Steuernummer des Kunden.
          maxLength: 32
          example: DE123456789
        iban:
          type:
            - string
            - "null"
          description: IBAN des Kunden, wird für das SEPA-Lastschriftverfahren verwendet.
          maxLength: 34
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC des Kunden, wird zusammen mit `iban` für das
            SEPA-Lastschriftverfahren verwendet.
          maxLength: 11
          example: COBADEFFXXX
        payment_target:
          type:
            - integer
            - "null"
          description: Anzahl der Tage, die der Kunde zur Zahlung einer Rechnung hat,
            gerechnet ab Rechnungsdatum.
          example: 30
        payment_target_discount:
          type:
            - integer
            - "null"
          description: Anzahl der Tage, innerhalb derer dem Kunden bei Zahlung ein Skonto
            gewährt wird.
          example: 2
        inactive:
          type:
            - boolean
            - "null"
          description: Ob der Kunde als inaktiv markiert und aus den Listen aktiver Kunden
            ausgeblendet werden soll.
          example: false
        billing_procedure:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per Standardrechnung oder im Gutschriftverfahren
            (Self-Billing) abgerechnet wird.
          example: true
        automated_invoicing:
          type:
            - boolean
            - "null"
          description: Ob Rechnungen für diesen Kunden automatisch statt manuell erzeugt
            werden sollen.
          example: true
        debit_payment:
          type:
            - boolean
            - "null"
          description: Ob dieser Kunde per SEPA-Lastschrift statt per Überweisung zahlt.
          example: false
        department_id:
          type: integer
          description: ID der Abteilung, der dieser Kunde zugeordnet ist.
          example: 1
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Werte benutzerdefinierter dynamischer Attribute, die am Kunden
            gesetzt werden, mit dem Attributnamen als Schlüssel.
          items:
            type: array
            items:
              type: string
        categories:
          type:
            - array
            - "null"
          description: Die IDs der Kategorien, die dem Kunden zugeordnet werden sollen.
          items:
            type: string
      title: UpdateCustomerApiRequest
    UpdateEmployeeRequest:
      type: object
      description: Payload for updating an existing employee. Unset fields keep their
        current value.
      properties:
        username:
          type: string
          description: >-
            Eindeutiger Login-Name des Mitarbeiters. Nicht tatsächlich änderbar
            — muss mit dem

            aktuellen Benutzernamen des Mitarbeiters übereinstimmen.
          minLength: 1
          maxLength: 32
          example: max.mustermann
        firstname:
          type: string
          description: Vorname des Mitarbeiters.
          maxLength: 255
          example: Max
        lastname:
          type: string
          description: Nachname des Mitarbeiters.
          maxLength: 255
          example: Mustermann
        email:
          type: string
          format: email
          description: Geschäftliche E-Mail-Adresse des Mitarbeiters.
          maxLength: 255
          example: erika.mustermann@acme-corp.de
        personal_number:
          type:
            - string
            - "null"
          description: Personalnummer des Mitarbeiters, wie auf der Gehaltsabrechnung
            angegeben.
          example: "1"
        birthdate:
          type:
            - string
            - "null"
          format: date-time
          description: Geburtsdatum des Mitarbeiters.
          example: 1985-08-17T00:00:00.000000Z
        phone:
          type:
            - string
            - "null"
          description: Geschäftliche Festnetznummer.
          example: +49 30 12345678
        department_id:
          type:
            - integer
            - "null"
          description: Kennung der Abteilung, der der Mitarbeiter zugeordnet ist.
          example: 1
        rights:
          description: Rechtestufe, die dem Mitarbeiter in der Anwendung gewährt wird.
          anyOf:
            - $ref: "#/components/schemas/EmployeeRights"
            - type: "null"
        employment:
          description: Art der Beschäftigung (festangestellt, freiberuflich, ...).
          anyOf:
            - $ref: "#/components/schemas/EmploymentType"
            - type: "null"
        price_group:
          type: string
          description: Preisgruppe, aus der die Abrechnungssätze des Mitarbeiters
            abgeleitet werden.
          example: Junior-Entwickler
        oauth_username:
          type:
            - string
            - "null"
          description: Benutzername, mit dem der Mitarbeiter einer externen
            OAuth-Identität zugeordnet wird.
        salutation:
          description: Anrede (Herr, Frau, ...), die bei der Ansprache des Mitarbeiters
            verwendet wird.
          anyOf:
            - $ref: "#/components/schemas/Salutation"
            - type: "null"
        street:
          type:
            - string
            - "null"
          description: Straße und Hausnummer der Adresse des Mitarbeiters.
          maxLength: 64
          example: Musterstraße 30
        zip:
          type:
            - string
            - "null"
          description: Postleitzahl der Adresse des Mitarbeiters.
          maxLength: 32
          example: "71254"
        city:
          type:
            - string
            - "null"
          description: Ort der Adresse des Mitarbeiters.
          maxLength: 64
          example: Berlin
        country:
          type:
            - string
            - "null"
          description: Land der Adresse des Mitarbeiters.
          maxLength: 64
          example: Deutschland
        abbreviation:
          type:
            - string
            - "null"
          description: Kurzzeichen zur Identifikation des Mitarbeiters in kompakten
            Ansichten und Berichten.
          maxLength: 32
          example: MM
        title:
          type:
            - string
            - "null"
          description: Akademischer oder beruflicher Titel, sofern vorhanden.
          maxLength: 32
          example: Dr.
        mobile:
          type:
            - string
            - "null"
          description: Geschäftliche Mobilnummer.
          maxLength: 32
          example: +49 170 1234567
        fax:
          type:
            - string
            - "null"
          description: Geschäftliche Faxnummer.
          maxLength: 32
          example: +1-555-0124
        private_phone:
          type:
            - string
            - "null"
          description: Private Telefonnummer, getrennt von der geschäftlichen
            Telefonnummer geführt.
          maxLength: 32
          example: 07156 33958
        iban:
          type:
            - string
            - "null"
          description: IBAN (International Bank Account Number) für Erstattungen und
            Gehaltszahlungen.
          maxLength: 34
          example: DE89370400440532013000
        bic:
          type:
            - string
            - "null"
          description: BIC (Bank Identifier Code) der Bank des Mitarbeiters.
          maxLength: 11
          example: COBADEFFXXX
        account_no:
          type:
            - string
            - "null"
          description: Kontonummer, wird verwendet, wenn keine IBAN verfügbar ist.
          maxLength: 32
        bank_name:
          type:
            - string
            - "null"
          description: Name der Bank des Mitarbeiters.
          maxLength: 64
        bank_code:
          type:
            - string
            - "null"
          description: Bankleitzahl der Bank des Mitarbeiters.
          maxLength: 32
        currency:
          type:
            - string
            - "null"
          description: Währung, in der die Stundensätze und Erstattungen des Mitarbeiters
            angegeben sind.
          maxLength: 32
          example: EUR
        approval_date:
          type:
            - string
            - "null"
          format: date-time
          description: Datum, an dem die Daten/der Vertrag des Mitarbeiters genehmigt
            wurden.
        vat:
          type:
            - number
            - "null"
          description: Umsatzsteuersatz, der auf die abgerechneten Stundensätze des
            Mitarbeiters angewendet wird.
          example: 1.5
        personio_id:
          type:
            - string
            - "null"
          description: Kennung des Mitarbeiters im angebundenen Personio-HR-System, sofern
            verknüpft.
          maxLength: 32
        connector_external_ids:
          type:
            - array
            - "null"
          description: Externe Kennungen, mit denen dieser Mitarbeiter je Connector
            zugeordnet wird.
          items:
            type: string
        cost_bearer:
          type:
            - string
            - "null"
          description: Kostenstelle, auf die Zeiten und Auslagen des Mitarbeiters gebucht
            werden.
          maxLength: 32
        tax_id:
          type:
            - string
            - "null"
          description: Steueridentifikationsnummer des Mitarbeiters.
          maxLength: 32
        creditor_number:
          type:
            - string
            - "null"
          description: Kreditorennummer, die bei der Erstattung an den Mitarbeiter über
            die Buchhaltung verwendet wird.
          maxLength: 32
          example: "80033"
        cost_accounting_ads:
          type:
            - boolean
            - "null"
          description: Ob die Kostenrechnung des Mitarbeiters über ADS übermittelt wird.
          example: true
        categories:
          type:
            - array
            - "null"
          description: Kategorien, denen der Mitarbeiter zugeordnet werden soll.
          items:
            type: string
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Benutzerdefinierte dynamische Attribute, die für den Mitarbeiter
            gesetzt werden sollen.
          items:
            type: array
            items:
              type: string
      required:
        - username
      title: UpdateEmployeeRequest
    UpdateEmploymentPeriodApiRequest:
      type: object
      description: Payload for updating an existing employment period. Unset fields
        keep their current value.
      properties:
        id:
          type: integer
          description: Kennung des zu aktualisierenden Beschäftigungszeitraums.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den dieser
            Beschäftigungszeitraum erfasst wird.
          maxLength: 32
          example: max.mustermann
        start_date:
          type: string
          format: date-time
          description: Erster Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt ist.
          example: 2024-01-15T00:00:00.000000Z
        end_date:
          type:
            - string
            - "null"
          format: date-time
          description: Letzter Kalendertag, an dem der Mitarbeiter in diesem Zeitraum
            beschäftigt ist, falls er endet.
          example: 2024-01-16T00:00:00.000000Z
        note:
          type:
            - string
            - "null"
          description: Freitextnotiz zum Beschäftigungszeitraum.
          maxLength: 255
          example: Familienurlaub
        annual_leave_entitlement:
          type:
            - number
            - "null"
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter pro vollem
            Urlaubsjahr Anspruch hat.
          minimum: 0
          example: 30
        beginning_of_year:
          type:
            - string
            - "null"
          format: date-time
          description: Kalendertag, an dem das Urlaubsjahr für diesen
            Beschäftigungszeitraum beginnt.
          example: 2024-01-01T00:00:00.000000Z
        period_holiday_entitlement:
          type:
            - number
            - "null"
          description: Anzahl der Urlaubstage, auf die der Mitarbeiter Anspruch hat,
            anteilig für diesen Zeitraum.
          minimum: 0
          example: 30
        is_holiday_per_year:
          type:
            - boolean
            - "null"
          description: >-
            Ob der Urlaubsanspruch pro Kalenderjahr und nicht pro
            Beschäftigungszeitraum

            angegeben ist.
          example: true
        day_absent_in_hours:
          type:
            - number
            - "null"
          description: Anzahl der Stunden, mit denen ein ganzer Fehltag für diesen
            Beschäftigungszeitraum gebucht wird.
          minimum: 0
          example: 8
      required:
        - id
        - employee_id
        - start_date
      title: UpdateEmploymentPeriodApiRequest
    UpdateProjectApiRequest:
      type: object
      description: Payload for updating a project. All fields are optional; only the
        ones present are changed.
      properties:
        name:
          type: string
          description: Name des Projekts. Muss innerhalb des Mandanten eindeutig sein.
          maxLength: 64
          example: EU
        department_id:
          type: integer
          description: Kennung der Abteilung, der das Projekt zugeordnet ist.
          example: 1
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Projekts.
          maxLength: 255
          example: Angebot|en:offer
        start_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem das Projekt beginnt.
          example: 2024-01-15
        end_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem das Projekt endet, sofern ein Ende festgelegt ist.
          example: 2024-01-16
        location_address:
          type:
            - string
            - "null"
          description: Straße und Hausnummer des Projektstandorts.
          maxLength: 64
        location_city:
          type:
            - string
            - "null"
          description: Ort des Projektstandorts.
          maxLength: 64
        location_state:
          type:
            - string
            - "null"
          description: Bundesland oder Region des Projektstandorts.
          maxLength: 64
        location_country:
          type:
            - string
            - "null"
          description: Land des Projektstandorts.
          maxLength: 32
        comments:
          type:
            - string
            - "null"
          description: Interne Freitext-Kommentare zum Projekt.
          example: Wichtiger Kunde - mit Sorgfalt behandeln
        plan_expenses:
          type:
            - number
            - "null"
          description: Geplante Gesamtausgaben, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_hours:
          type:
            - number
            - "null"
          description: Geplante Gesamtstunden, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_wage:
          type:
            - number
            - "null"
          description: Geplante Gesamtlohnkosten, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_expenses_travel:
          type:
            - number
            - "null"
          description: Geplante Reisekosten, die für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        cost_object:
          type:
            - string
            - "null"
          description: Kostenträger, dem die Buchungen des Projekts zugeordnet werden.
          maxLength: 32
        plan_hours_done:
          type:
            - number
            - "null"
          description: Bereits auf das Projekt erfasste Stunden.
          example: 1.5
        plan_hours_invoiced:
          type:
            - number
            - "null"
          description: Bereits für das Projekt in Rechnung gestellte Stunden.
          example: 1.5
        customer_project_reference:
          type:
            - string
            - "null"
          description: Eigene Referenznummer des Kunden für dieses Projekt.
          maxLength: 64
        customer_billing_address_id:
          type:
            - integer
            - "null"
          description: Kennung der Kundenadresse, die für die Rechnungsstellung verwendet
            wird.
          example: 1
        customer_shipping_address_id:
          type:
            - integer
            - "null"
          description: Kennung der Kundenadresse, die für den Versand verwendet wird.
          example: 1
        has_multiple_customers:
          type:
            - boolean
            - "null"
          description: Ob das Projekt an mehr als einen Kunden abgerechnet werden kann.
          example: true
        cost_object_identifier:
          type:
            - integer
            - "null"
          description: Externe Kennung des Kostenträgers, wird für den Buchhaltungsexport
            verwendet.
          minimum: 0
          example: 1
        project_status_id:
          type:
            - string
            - "null"
          description: Kennung des aktuellen Projektstatus.
          maxLength: 64
          example: aktiv
        billing_type:
          description: "Wie das Projekt abgerechnet wird: Stundensatz, Tagessatz oder
            Pauschale."
          anyOf:
            - $ref: "#/components/schemas/BillingType"
            - type: "null"
        default_billability:
          description: Standard-Abrechenbarkeit, die auf neue Zeiteinträge in diesem
            Projekt angewendet wird.
          anyOf:
            - $ref: "#/components/schemas/DefaultBillability"
            - type: "null"
        receipts_billability:
          description: Standard-Abrechenbarkeit, die auf neue Belege in diesem Projekt
            angewendet wird.
          anyOf:
            - $ref: "#/components/schemas/ReceiptsBillability"
            - type: "null"
        currency:
          type:
            - string
            - "null"
          description: Währung, die für Geldbeträge in diesem Projekt verwendet wird.
          example: EUR
        language:
          description: Sprache, die für Dokumente dieses Projekts verwendet wird.
          anyOf:
            - $ref: "#/components/schemas/Language"
            - type: "null"
        url:
          type:
            - string
            - "null"
          description: Mit dem Projekt verknüpfte URL, zum Beispiel ein Link zu einem
            Kundenportal.
          maxLength: 255
          example: https://www.zep-online.de/zepinstanz/next/api/v1/articles?page=1
        reference_commission:
          type:
            - string
            - "null"
          description: Kommissionsreferenz des Kunden für dieses Projekt.
          maxLength: 100
        reference_procurement:
          type:
            - string
            - "null"
          description: Beschaffungsreferenz des Kunden für dieses Projekt.
          maxLength: 100
        reference_object:
          type:
            - string
            - "null"
          description: Objektreferenz des Kunden für dieses Projekt.
          maxLength: 100
        indicate_hours_for_daily_proof:
          type:
            - integer
            - "null"
          description: Ob das Stundenfeld auf dem Tagesnachweis angezeigt wird.
          example: 1
        indicate_remarks_for_daily_proof:
          type:
            - integer
            - "null"
          description: Ob das Bemerkungsfeld auf dem Tagesnachweis angezeigt wird.
          example: 1
        indicate_all_locations_per_day:
          type:
            - integer
            - "null"
          description: Ob alle Einsatzorte pro Tag auf dem Tagesnachweis aufgeführt werden.
          example: 1
        also_take_into_account_the_price_factors_for_hourly_rates:
          type:
            - integer
            - "null"
          description: Ob bei Stundensätzen zusätzlich die Preisfaktoren des Projekts
            berücksichtigt werden.
          example: 1
        indicate_all_activities_per_day:
          type:
            - integer
            - "null"
          description: Ob alle Tätigkeiten pro Tag auf dem Tagesnachweis aufgeführt werden.
          example: 1
        employee_name_time_report_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters im Stundennachweis
            angezeigt wird.
          example: 1
        employee_name_project_sales_volume_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters im Projektumsatzbericht
            angezeigt wird.
          example: 1
        employee_name_invoice_attachment_format:
          type:
            - integer
            - "null"
          description: Format, in dem der Name des Mitarbeiters in der Rechnungsanlage
            angezeigt wird.
          example: 1
        travel_flat_rate:
          type:
            - number
            - "null"
          description: Pauschale, die für Reisen in diesem Projekt berechnet wird.
          example: 1.5
        reference_order:
          type:
            - string
            - "null"
          description: Bestellreferenz des Kunden für dieses Projekt.
          maxLength: 100
        billing_tasks:
          type:
            - boolean
            - "null"
          description: Ob die Vorgänge des Projekts jeweils eine eigene Abrechnungsart
            haben können.
          example: true
        revenue_account:
          type:
            - string
            - "null"
          description: Erlöskonto, auf das der Umsatz des Projekts gebucht wird.
          maxLength: 32
          example: "8400"
        plan_hours_children:
          type:
            - number
            - "null"
          description: Geplante Stunden, die über die Vorgänge des Projekts budgetiert sind.
          minimum: 0
          example: 1.5
        plan_hours_per_day:
          type:
            - number
            - "null"
          description: Geplante Stunden, die pro Tag für das Projekt budgetiert sind.
          minimum: 0
          example: 1.5
        plan_warning_percent:
          type:
            - number
            - "null"
          description: Prozentsatz des geplanten Budgets, bei dem eine Warnung ausgelöst
            wird.
          minimum: 0
          example: 1.5
        plan_warning_percent_2:
          type:
            - number
            - "null"
          description: Zweite Warnschwelle als Prozentsatz des geplanten Budgets.
          minimum: 0
          example: 1.5
        plan_warning_percent_3:
          type:
            - number
            - "null"
          description: Dritte Warnschwelle als Prozentsatz des geplanten Budgets.
          minimum: 0
          example: 1.5
        plan_can_exceed:
          description: Ob erfasste Stunden das geplante Budget überschreiten dürfen.
          anyOf:
            - $ref: "#/components/schemas/PlanCanExceedOption"
            - type: "null"
        keywords:
          type:
            - array
            - "null"
          description: Freitext-Schlagwörter zur Suche nach dem Projekt.
          items:
            type: string
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Dynamische Attribute, die für das Projekt konfiguriert werden.
          items:
            type: array
            items:
              type: string
        categories:
          type:
            - array
            - "null"
          description: Kategorien, die dem Projekt zugeordnet werden.
          items:
            type: string
        customer_id:
          type:
            - integer
            - "null"
          description: Kennung des Kunden, zu dem dieses Projekt gehört.
          example: 1
        customer_contact_id:
          type:
            - integer
            - "null"
          description: Kennung des für dieses Projekt verantwortlichen Ansprechpartners.
          example: 789
      title: UpdateProjectApiRequest
    UpdateProjectTaskApiRequest:
      type: object
      description: Payload for updating a task within a project. All fields are
        optional; only the ones present are changed.
      properties:
        id:
          type: integer
          description: Kennung des zu aktualisierenden Vorgangs.
          example: 1
        project_id:
          type: integer
          description: Kennung des Projekts, zu dem dieser Vorgang gehört.
          example: 16
        name:
          type: string
          description: Name des Vorgangs.
          maxLength: 64
          example: EU
        description:
          type:
            - string
            - "null"
          description: Freitext-Beschreibung des Vorgangs.
          example: Angebot|en:offer
        status_id:
          type: string
          description: Kennung des Status des Vorgangs.
        billing_type:
          description: "Wie der Vorgang abgerechnet wird: Stundensatz, Tagessatz,
            Pauschale oder wie das Projekt."
          anyOf:
            - $ref: "#/components/schemas/ProjectTaskBillingType"
            - type: "null"
        start_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem der Vorgang beginnt.
          example: 2024-01-15
        end_date:
          type:
            - string
            - "null"
          format: date
          description: Datum, an dem der Vorgang endet.
          example: 2024-01-16
        parent_id:
          type:
            - integer
            - "null"
          description: Kennung des übergeordneten Vorgangs, bei einem Vorgang, der unter
            einem anderen eingeordnet ist.
          example: 1
        cost_object_identifier:
          type:
            - integer
            - "null"
          description: Externe Kennung des Kostenträgers des Vorgangs, verwendet für den
            Buchhaltungsexport.
          minimum: 0
          example: 1
        has_explicit_assigned_employees:
          type:
            - boolean
            - "null"
          description: Ob Mitarbeiter dem Vorgang explizit zugeordnet werden müssen, statt
            die Zuordnung des Projekts zu übernehmen.
          example: true
        tickets_import_mailbox_name:
          type:
            - string
            - "null"
          description: Name des Postfachs, aus dem Tickets in diesen Vorgang importiert
            werden.
        dynamicAttributes:
          type:
            - array
            - "null"
          description: Dynamische Attribute, die für den Vorgang konfiguriert werden.
          items:
            type: array
            items:
              type: string
      required:
        - id
        - project_id
        - name
        - status_id
      title: UpdateProjectTaskApiRequest
    UpdateReceiptRequest:
      type: object
      description: >-
        Payload for updating an existing receipt. Any field left out keeps its
        current value, except

        receiptAmounts, whose current entries are used as the default when it is
        not provided.
      properties:
        id:
          type:
            - integer
            - "null"
          description: Der zu aktualisierende Beleg; entfällt beim Anlegen eines neuen
            Belegs.
          example: 1
        employee_id:
          type:
            - string
            - "null"
          description: Der Benutzername des Mitarbeiters, für den dieser Beleg gebucht wird.
          maxLength: 255
          example: max.mustermann
        date:
          type: string
          format: date-time
          description: Das Datum, an dem die Ausgabe erfasst wurde.
          example: 2024-07-20T00:00:00.000000Z
        performance_date:
          type:
            - string
            - "null"
          format: date-time
          description: Das Datum, an dem die zugrunde liegende Leistung oder Ausgabe
            tatsächlich stattgefunden hat, falls es vom Buchungsdatum abweicht.
          example: 2024-11-15
        receipt_type_id:
          type: string
          description: Die Belegart, unter der diese Ausgabe gebucht ist, z. B. Reise oder
            Mahlzeit.
          maxLength: 255
          example: Fahrkarte
        project_id:
          type: integer
          description: Das Projekt, auf das dieser Beleg gebucht ist.
          example: 16
        project_task_id:
          type:
            - integer
            - "null"
          description: Der Vorgang, auf den dieser Beleg gebucht wird; muss zum
            angegebenen Projekt gehören.
          example: 1
        payment_method:
          type: string
          description: Wie die Ausgabe bezahlt wurde — z. B. bar, Firmenkarte oder Rechnung.
          maxLength: 255
          example: privat
        currency:
          type: string
          description: Der dreistellige Währungscode, in dem die nachfolgenden
            Betragsfelder angegeben sind.
          maxLength: 32
          example: EUR
        is_amount_net:
          type: boolean
          description: Ob die Beträge in receiptAmounts Nettobeträge (ohne Steuer) statt
            Bruttobeträge sind.
          example: false
        is_invoice_amount_net:
          type:
            - boolean
            - "null"
          description: Ob der fakturierbare Betrag ein Nettobetrag (ohne Steuer) ist;
            erforderlich, sobald eine Zeile einen invoicing_share enthält.
          example: false
        note:
          type:
            - string
            - "null"
          description: Eine Freitextnotiz zum Beleg.
          maxLength: 255
          example: Familienurlaub
        receiptAmounts:
          type: array
          description: "Die Aufschlüsselung dieses Belegs nach Steuersatz und Betrag: ein
            Eintrag pro Mehrwertsteuersatz, auf den der Betrag aufgeteilt ist."
          items:
            type: object
            properties:
              tax:
                type: number
                description: >-
                  Der Mehrwertsteuersatz dieser Zeile in Prozent. Muss einer der
                  Steuersätze sein, die die

                  Belegart zulässt.
                minimum: 0
                maximum: 100
              quantity:
                type: number
                description: Wie viele Einheiten diese Zeile umfasst.
                minimum: 1
              amount:
                type: number
                description: Der Betrag der Zeile zum oben angegebenen Mehrwertsteuersatz.
                minimum: 0
              private_share:
                type:
                  - number
                  - "null"
                description: Der Teil des Betrags, der privat getragen und nicht erstattet wird.
                minimum: 0
              invoicing_share:
                type:
                  - number
                  - "null"
                description: >-
                  Der Teil des Betrags, der an den Kunden weiterberechnet wird.
                  Wird ignoriert, sofern das Projekt

                  nicht die Abrechnung von Belegen erlaubt.
                minimum: 0
            required:
              - tax
              - quantity
              - amount
          minItems: 1
      required:
        - date
        - receipt_type_id
        - project_id
        - payment_method
        - currency
        - is_amount_net
        - receiptAmounts
      title: UpdateReceiptRequest
    UpdateRegularWorkingTimeApiRequst:
      type: object
      description: Payload for updating an existing regular working-time schedule.
        Unset fields keep their current value.
      properties:
        id:
          type: integer
          description: Kennung der zu aktualisierenden Regelarbeitszeit.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, für den diese Regelarbeitszeit gilt.
          maxLength: 32
          example: max.mustermann
        start_date:
          type:
            - string
            - "null"
          format: date-time
          description: Kalendertag, ab dem diese Regelarbeitszeit gilt.
          example: 2024-01-15T00:00:00.000000Z
        monday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Montag.
          minimum: 0
          example: 8
        tuesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Dienstag.
          minimum: 0
          example: 8
        wednesday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Mittwoch.
          minimum: 0
          example: 4
        thursday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Donnerstag.
          minimum: 0
          example: 8
        friday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Freitag.
          minimum: 0
          example: 6
        saturday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Samstag.
          minimum: 0
          example: 0
        sunday:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden am Sonntag.
          minimum: 0
          example: 0
        monday_workday:
          type:
            - boolean
            - "null"
          description: Ob Montag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        tuesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Dienstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        wednesday_workday:
          type:
            - boolean
            - "null"
          description: Ob Mittwoch in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        thursday_workday:
          type:
            - boolean
            - "null"
          description: Ob Donnerstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        friday_workday:
          type:
            - boolean
            - "null"
          description: Ob Freitag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        saturday_workday:
          type:
            - boolean
            - "null"
          description: Ob Samstag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        sunday_workday:
          type:
            - boolean
            - "null"
          description: Ob Sonntag in dieser Regelarbeitszeit als Arbeitstag zählt.
          example: true
        is_monthly:
          type:
            - boolean
            - "null"
          description: Ob die Regelarbeitszeit als Monatssumme statt pro Wochentag
            definiert ist.
          example: true
        monthly_hours:
          type:
            - number
            - "null"
          description: Geplante Arbeitsstunden pro Monat, nur verwendet, wenn die
            Regelarbeitszeit monatlich definiert ist.
          minimum: 0
          example: 150.34
        max_hours_in_month:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Monat gemäß dieser
            Regelarbeitszeit.
          minimum: 0
          example: 137.51
        max_hours_in_week:
          type:
            - number
            - "null"
          description: Maximal zulässige Arbeitsstunden pro Woche gemäß dieser
            Regelarbeitszeit.
          minimum: 0
          example: 74.25
        break_regulation_type_id:
          type:
            - integer
            - "null"
          description: Kennung der Pausenregelung, die auf diese Regelarbeitszeit
            angewendet wird.
          example: 1
        holiday_calendar_id:
          type:
            - integer
            - "null"
          description: Kennung des Feiertagskalenders, aus dem die gesetzlichen Feiertage
            dieser Regelarbeitszeit stammen.
          example: 1
      required:
        - id
        - employee_id
      title: UpdateRegularWorkingTimeApiRequst
    WorkHourBalance:
      type: object
      properties:
        id:
          type: integer
          description: Eindeutige Kennung des zwischengespeicherten
            Stundenkonto-Datensatzes.
          example: 1
        employee_id:
          type: string
          description: Benutzername des Mitarbeiters, dem dieses Stundenkonto gehört.
          example: max.mustermann
        balance:
          type: number
          description: Zwischengespeicherter Überstundensaldo zum Stand der Berechnung des
            Vortages.
          example: 1.5
        calculated_at:
          type: string
          format: date-time
          description: Zeitstempel, zu dem der Saldo zuletzt berechnet wurde.
        vacation:
          type: array
          description: Genehmigte, geplante, verbleibende und jährliche Urlaubsansprüche
            in Tagen, pro Zeitraum.
          items:
            type: object
            properties:
              year:
                type: string
                description: Das Kalenderjahr, auf das sich dieser Anspruchszeitraum bezieht.
              approved:
                type: number
                description: In diesem Zeitraum bereits genehmigte Urlaubstage.
              planned:
                type: number
                description: In diesem Zeitraum geplante, aber noch nicht genehmigte
                  Urlaubstage.
              remaining:
                type: number
                description: In diesem Zeitraum noch verfügbare Urlaubstage.
              annual_entitlement:
                type: number
                description: Der volle jährliche Urlaubsanspruch für diesen Zeitraum, in Tagen.
            required:
              - year
              - approved
              - planned
              - remaining
              - annual_entitlement
      required:
        - id
        - employee_id
        - balance
        - calculated_at
        - vacation
      title: WorkHourBalanceResource
  responses:
    AuthenticationException:
      description: Unauthenticated
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Error overview.
            required:
              - message
    ValidationException:
      description: Validation error
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Errors overview.
              errors:
                type: object
                description: A detailed description of each field that failed validation.
                additionalProperties:
                  type: array
                  items:
                    type: string
            required:
              - message
              - errors
    ModelNotFoundException:
      description: Not found
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Error overview.
            required:
              - message
    AuthorizationException:
      description: Authorization error
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Error overview.
            required:
              - message
externalDocs:
  description: Developer Hub
  url: https://developer.zep.de
tags:
  - name: Projects
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Projekte abrufen.
  - name: Attendances
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Projektzeiten abrufen.
  - name: Employees
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Mitarbeiter abrufen.
  - name: Customers
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller Kunden abrufen.
  - name: Absences
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Abwesenheiten abrufen.
  - name: Departments
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Abteilungen abrufen.
  - name: Devices
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Terminals abrufen.
  - name: Receipts
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller Belege abrufen.
  - name: Tickets
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller Tickets
      abrufen.
  - name: Invoices
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Rechnungen abrufen.
  - name: Offers
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Angebote abrufen.
  - name: Articles
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller Artikel
      abrufen.
  - name: WorkhourBalances
    description: Nur lesender Zugriff auf die zwischengespeicherten Überstunden- und
      Urlaubsanspruchssalden (Vortages-Snapshot je Mitarbeiter).
  - name: Documents
    description: Dokumentordner und deren Dokumente.
  - name: Masterdata
    description: Stammdaten-Ressourcen (Preisgruppen, Tätigkeiten, Fehlgründe,
      Kategorien, Standortlisten, Standorte, dynamische Attribute).
  - name: Plannings
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Planungseinträge abrufen.
  - name: ResourcePlannings
    description: Über diesen Endpunkt können Sie eine paginierte Liste aller
      Planungen der Ressourcenplanung mit ihren geplanten Stunden pro Monat
      abrufen.
