openapi: 3.0.3
info:
  title: Schnittstelle zur Erstattung überbetrieblicher Ausbildungskosten
  description: |
    Die Webschnittstelle ermöglicht den überbetrieblichen Ausbildungsstätten die Beantragung der Erstattung 
    von Ausbildungskosten im Dachdeckerhandwerk. Es können Betriebs- und Auszubildendendaten abgegeglichen werden
    zwischen den überbetrieblichen Ausbildungsstätten und SOKA-DACH. Ferner können überbetriebliche Ausbildungskosten 
    eingereicht werden.
  version: 2.1.2
paths:
  /betriebe:
    post:
      summary: Übertragung von Betriebsdaten zum Abgleich.
      operationId: postBetriebedaten
      requestBody:
        description: Übertragung der Informationen der Ausbildungsstätte und der Betriebe.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BetriebeAbgleich"
      responses:
        202:
          description: Die Anfrage ist valide und wird bearbeitet.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebePostResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebePostResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebePostResponse"
    get:
      summary: |
        Übermittlung der abgeglichen Betriebsdaten. 
        Die übermittelte Information bezieht sich jeweils auf genau eine Anfrage.
      operationId: getBetriebedaten
      parameters:
        - name: AnfrageId
          in: header
          required: true
          schema:
            type: string
            minLength: 6
            maxLength: 6
            pattern: '^\d{6}$'
            description: Id der Anfrage, auf die sich der Request bezieht. Der Feldinhalt muss aus genau 6 numerischen
              Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "001234"
        - name: AbsenderId
          in: header
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 4
            pattern: '^\d{4}$'
            description: ID-Nummer der Institution, die den Request erzeugt hat. Der Feldinhalt muss aus genau 4
              numerischen Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "0012"
        - name: ZeitpunktErstellung
          in: header
          required: true
          schema:
            type: string
            format: date-time
            description:
              Datum und Uhrzeit der Erstellung der Anfrage, auf die sich der Request bezieht.
              Die Uhrzeit ist stets auf eine Genauigkeit von Millisekunden anzugeben, um
              eine Zuordnung zum zugehörigen Datensatz zu ermöglichen.
            example: "2017-07-21T17:32:28.123Z"
      responses:
        200:
          description: Die Anfrage ist valide und wurde entsprechend ergänzt.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebeGetResponse"
        204:
          description: Die Bearbeitung der Anfrage läuft noch.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebeGetResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebeGetResponse"
        404:
          description: Es konnte keine Anfrage mit dieser Id gefunden werden.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebeGetResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BetriebeGetResponse"
  /azubis:
    post:
      summary: Übertragung von Auszubildenden-Daten zum Abgleich.
      operationId: postAzubidaten
      requestBody:
        description: Übertragung der Informationen der Ausbildungsstätte und der Auszubildenden.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AzubiAbgleich"
      responses:
        202:
          description: Die Anfrage ist valide und wird bearbeitet.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiPostResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiPostResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiPostResponse"
    get:
      summary: |
        Übermittlung der abgeglichenen Auszubildenden-Daten. 
        Die übermittelte Information bezieht sich jeweils auf genau eine Anfrage.
      operationId: getAzubidaten
      parameters:
        - name: AnfrageId
          in: header
          required: true
          schema:
            type: string
            minLength: 6
            maxLength: 6
            pattern: '^\d{6}$'
            description: Id der Anfrage, auf die sich der Request bezieht. Der Feldinhalt muss aus genau 6 numerischen
              Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "001234"
        - name: AbsenderId
          in: header
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 4
            pattern: '^\d{4}$'
            description: ID-Nummer der Institution, die den Request erzeugt hat. Der Feldinhalt muss aus genau 4
              numerischen Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "0012"
        - name: ZeitpunktErstellung
          in: header
          required: true
          schema:
            type: string
            format: date-time
            description:
              Datum und Uhrzeit der Erstellung der Anfrage, auf die sich der Request bezieht.
              Die Uhrzeit ist stets auf eine Genauigkeit von Millisekunden anzugeben, um
              eine Zuordnung zum zugehörigen Datensatz zu ermöglichen.
            example: "2017-07-21T17:32:28.123Z"
      responses:
        200:
          description: Die Anfrage ist valide und wurde entsprechend ergänzt.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiGetResponse"
        204:
          description: Die Bearbeitung der Anfrage läuft noch.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiGetResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiGetResponse"
        404:
          description: Es konnte keine Anfrage mit dieser Id gefunden werden.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiGetResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AzubiGetResponse"
  /abrechnungen:
    post:
      summary: Übermittlung der Abrechnungsdaten.
      operationId: postAbrechnungsdaten
      requestBody:
        description: Übertragung der Informationen der Ausbildungsstätte und der Abrechungsdaten.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AbrechnungsAbgleich"
      responses:
        202:
          description: Die Anfrage ist valide und wird bearbeitet.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenPostResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenPostResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenPostResponse"
    get:
      summary: |
        Übermittlung der bearbeiteten Abrechnungsdaten.
        Die übermittelte Information bezieht sich jeweils auf genau eine Anfrage.
      operationId: getAbrechnungsdaten
      parameters:
        - name: AnfrageId
          in: header
          required: true
          schema:
            type: string
            minLength: 6
            maxLength: 6
            pattern: '^\d{6}$'
            description: Id der Anfrage, auf die sich der Request bezieht. Der Feldinhalt muss aus genau 6 numerischen
              Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "001234"
        - name: AbsenderId
          in: header
          required: true
          schema:
            type: string
            minLength: 4
            maxLength: 4
            pattern: '^\d{4}$'
            description: ID-Nummer der Institution, die den Request erzeugt hat. Der Feldinhalt muss aus genau 4
              numerischen Zeichen bestehen. Führende Nullen sind erlaubt.
            example: "0012"
        - name: ZeitpunktErstellung
          in: header
          required: true
          schema:
            type: string
            format: date-time
            description:
              Datum und Uhrzeit der Erstellung der Anfrage, auf die sich der Request bezieht.
              Die Uhrzeit ist stets auf eine Genauigkeit von Millisekunden anzugeben, um
              eine Zuordnung zum zugehörigen Datensatz zu ermöglichen.
            example: "2017-07-21T17:32:28.123Z"
      responses:
        200:
          description: Die Anfrage ist valide und wurde entsprechend ergänzt.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenGetResponse"
        204:
          description: Die Bearbeitung der Anfrage läuft noch.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenGetResponse"
        400:
          description: Die Anfrage war fehlerhaft aufgebaut.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenGetResponse"
        404:
          description: Es konnte keine Anfrage mit dieser Id gefunden werden.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenGetResponse"
        500:
          description: Dieser Fehlercode tritt bei einem internen Fehler des Servers auf.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AbrechungenGetResponse"
components:
  schemas:
    BetriebePostResponse:
      $ref: "#/components/schemas/ValidierungFehlerListe"
    BetriebeGetResponse:
      oneOf:
        - $ref: "#/components/schemas/BetriebeAbgleich"
        - $ref: "#/components/schemas/ValidierungFehlerListe"
    AzubiPostResponse:
      $ref: "#/components/schemas/ValidierungFehlerListe"
    AzubiGetResponse:
      oneOf:
        - $ref: "#/components/schemas/AzubiAbgleich"
        - $ref: "#/components/schemas/ValidierungFehlerListe"
    AbrechungenPostResponse:
      $ref: "#/components/schemas/ValidierungFehlerListe"
    AbrechungenGetResponse:
      oneOf:
        - $ref: "#/components/schemas/AbrechnungsAbgleich"
        - $ref: "#/components/schemas/ValidierungFehlerListe"
    Kopfdatensatz:
      type: object
      required:
        - ZeitpunktErstellung
        - AbsenderId
        - AnfrageId
      properties:
        AuthorName:
          type: string
          maxLength: 20
          example: "Max Mustermann"
          description: Name des Sachbearbeiters, der diese Anfrage erstellt hat. Bei telefonischen
            Rückfragen erleichtert dies, den richtigen Ansprechpartner zu finden.
        ZeitpunktErstellung:
          type: string
          format: date-time
          description:
            Datum und Uhrzeit der Erstellung der Anfrage, auf die sich der Request bezieht.
            Die Uhrzeit ist stets auf eine Genauigkeit von Millisekunden anzugeben, um
            eine Zuordnung zum zugehörigen Datensatz zu ermöglichen.
          example: "2017-07-21T17:32:28.123Z"
        AbsenderId:
          type: string
          minLength: 4
          maxLength: 4
          pattern: '^\d{4}$'
          description: ID-Nummer der Institution, die den Request erzeugt hat. Der Feldinhalt muss aus genau 4
            numerischen Zeichen bestehen, wobei führende Nullen gestattet sind.
          example: "0123"
        EmpfaengerId:
          type: string
          minLength: 4
          maxLength: 4
          pattern: '^\d{4}$'
          description: ID-Nummer der Institution, an die der Request adressiert ist. Der Feldinhalt muss aus genau 4
            numerischen Zeichen bestehen, wobei führende Nullen gestattet sind.
          example: "0123"
        AnfrageId:
          type: string
          minLength: 6
          maxLength: 6
          pattern: '^\d{6}$'
          description: Id der aktuellen Anfrage. Es muss sich um eine eindeutige Zeichenkette für den Anfragetyp
            handeln. Der Feldinhalt muss aus genau 6 numerischen Zeichen bestehen, wobei führende Nullen gestattet sind.
          example: "012345"
        AtIban:
          type: string
          minLength: 22
          maxLength: 22
          description: IBAN zur Kostenerstattung für Ausbildungstagewerke.
        ItIban:
          type: string
          minLength: 22
          maxLength: 22
          description: IBAN zur Kostenerstattung für Internatstage.
        AbsenderKurzname:
          type: string
          maxLength: 25
          description: Kurzbezeichnung der anfragenden Institution.
        AusbildungsstaetteName1:
          type: string
          maxLength: 35
          description: Erste Namenszeile der Ausbildungsstätte.
        AusbildungsstaetteName2:
          type: string
          maxLength: 35
          description: Zweite Namenszeile der Ausbildungsstätte.
        AusbildungsstaetteName3:
          type: string
          maxLength: 35
          description: Dritte Namenszeile der Ausbildungsstätte.
        AusbildungsstaetteStrasseHausnummer:
          type: string
          maxLength: 40
          description: Straße und Hausnummer der Ausbildungsstaette.
        AusbildungsstaettePlz:
          type: string
          minLength: 5
          maxLength: 5
          pattern: '^\d{5}$'
          description: Die zur Strasse gehörige Postleitzahl.
        AusbildungsstaetteOrt:
          type: string
          maxLength: 30
          description: Ort der Ausbildungsstätte.
    BetriebeAbgleich:
      type: object
      properties:
        Header:
          $ref: "#/components/schemas/Kopfdatensatz"
        Betriebe:
          type: array
          items:
            $ref: "#/components/schemas/Betrieb"
    Betrieb:
      type: object
      required:
        - DatensatzId
        - BetriebFirmierung1
        - BetriebStrasseHausnummer
        - BetriebPlz
        - BetriebOrt
      properties:
        DatensatzId:
          type: string
          minLength: 12
          maxLength: 12
          pattern: '^\d{12}$'
          description: |
            Id des Datensatzes. Muss innerhalb des Datenpakets eindeutig sein und aus genau 12 
            numerischen Zeichen bestehen. Führende Nullen sind dabei erlaubt.
          example: "123002345678"
        ErgebnisDatenabgleich:
          type: string
          enum:
            - NICHT_EINDEUTIG
            - ABWEICHENDE_ANSCHRIFT
            - ABWEICHENDE_FIRMIERUNG
            - ERFOLGREICH
            - FEHLGESCHLAGEN
          description: |
            - NICHT_EINDEUTIG: Betriebskontonummer und Firmenbezeichnung lassen keine eindeutige Identifizierung
              des Betriebes zu. Der zur Betriebskontonummer passende Betrieb ist inaktiv; es existiert
              jedoch ein Nachfolger mit anderer Rechtsform.
            - ABWEICHENDE_ANSCHRIFT: Die Anschrift weicht von den bei der LAK gespeicherten Daten ab. Die Ausbildungsstätte
              muss die korrigierte Anschrift übernehmen.
            - ABWEICHENDE_FIRMIERUNG: Die Anschrift ist korrekt, jedoch weicht die Schreibweise des Firmennamens geringfügig
              von den bei der LAK gespeicherten Daten ab. Beim nächsten Abgleich muss die
              Schreibweise der LAK gesendet werden.
            - ERFOLGREICH: Der Datensatz der Schule konnte fehlerfrei verarbeitet werden.
            - FEHLGESCHLAGEN: Der Datensatz konnte nicht verarbeitet werden, da die Firma nicht eindeutig identifiziert
              werden konnte.
        BetriebStatus:
          type: string
          enum:
            - AKTIV
            - INAKTIV
            - OFFEN
          description: |
            - AKTIV: Die Firma ist bei der LAK als aktiv gekennzeichnet. Zahlungen für Auszubildende dieser
              Firma können prinzipiell erfolgen.
            - INAKTIV: Zahlungen für Auszubildende dieser Firma können nicht erfolgen.
            - OFFEN: Der Status der Firma ist bei der LAK noch nicht geklärt und muss zu einem späteren
              Zeitpunkt (> 1 Woche) wieder abgefragt werden.
        BetriebId:
          type: string
          minLength: 7
          maxLength: 7
          pattern: '^\d7\d{5}$'
          description: Betriebskontonummer bei LAK. Muss aus genau 7 numerischen Zeichen aufgebaut sein. An zweiter Stelle steht die Ziffer 7.
          example: "0712345"
        BetriebKurzname:
          type: string
          maxLength: 25
          description: Kurzbezeichnung des Betriebs.
        BetriebFirmierung1:
          type: string
          maxLength: 35
          description: Erste Namenszeile der Firmenbezeichnung.
          example: "Alfreds Dachdecker GmbH"
        BetriebFirmierung2:
          type: string
          maxLength: 35
          description: Zweite Namenszeile der Firmenbezeichnung.
        BetriebFirmierung3:
          type: string
          maxLength: 35
          description: Dritte Namenszeile der Firmenbezeichnung.
        BetriebStrasseHausnummer:
          type: string
          maxLength: 40
          description: Strasse und Hausnummer des Betriebs.
          example: "Musterstrasse 23"
        BetriebPlz:
          type: string
          minLength: 5
          maxLength: 5
          pattern: '^\d{5}$'
          description: Postleitzahl des Betriebs.
          example: "65399"
        BetriebOrt:
          type: string
          maxLength: 30
          description: Ort des Betriebs.
          example: "Walluf"
        BetriebStatusGueltigBis:
          type: string
          format: date
          description: Datum, bis zu dem der BetriebStatus gültig ist.
          example: "2024-05-01"
    AzubiAbgleich:
      type: object
      properties:
        Header:
          $ref: "#/components/schemas/Kopfdatensatz"
        Azubis:
          type: array
          items:
            $ref: "#/components/schemas/Azubi"
    Azubi:
      type: object
      required:
        - DatensatzId
        - AzubiNachname
        - AzubiVorname
        - AzubiGeschlecht
        - AzubiGeburtsdatum
        - AusbildungBeginn
        - AusbildungEndePlan
        - AusbildungVerkuerzung
        - AusbildungHandwerkskammerName
        - AtUebernahme
        - ItUebernahme
        - ApUebernahme
      properties:
        DatensatzId:
          type: string
          minLength: 12
          maxLength: 12
          pattern: '^\d{12}$'
          description: |
            Id des Datensatzes. Muss innerhalb des Datenpakets eindeutig sein und aus genau 12 
            numerischen Zeichen bestehen. Führende Nullen sind dabei erlaubt.
          example: "123002345678"
        ErgebnisDatenabgleich:
          type: string
          enum:
            - MODIFIZIERT
            - FEHLERFREI
            - FEHLERHAFT
          description: |
            - MODIFIZIERT: Der Datensatz wurde durch die LAK verändert. Die Änderungen sind durch die
              Ausbildungsstätte zu verarbeiten.
            - FEHLERFREI: Der Datensatz konnte fehlerfrei verarbeitet werden.
            - FEHLERHAFT: Der Datensatz konnte nicht verarbeitet werden.
        AzubiStatus:
          type: string
          enum:
            - AKTIV
            - INAKTIV
            - UMSCHUELER
            - ANFORDERUNG_VERTRAG
          description: |
            Aktueller Status des Auszubildenden. 
              - AKTIV: Der Auszubildende ist bei der LAK als aktiv gekennzeichnet. Zahlungen können prinzipiell
                erfolgen.
              - INAKTIV: Zahlungen für diesen Auszubildenden können nicht erfolgen.
              - UMSCHUELER: Der Ausbildungsvertrag wurde angefordert und ist bei der LAK eingegangen. Eine
                Abrechnung von Lehrgängen ist bei Umschülern nicht möglich.
              - ANFORDERUNG_VERTRAG: Die LAK bittet um Übersendung einer Kopie des Ausbildungsvertrages zur Überprüfung.
                Zahlungen können prinzipiell erst erfolgen, wenn der Ausbildungsvertrag positiv geprüft wurde.
        AzubiSvNr:
          type: string
          maxLength: 12
          description: Sozialversicherungsnummer des Auszubildenden.
        AzubiNachname:
          type: string
          maxLength: 30
          description: Nachname des Auszubildenden.
        AzubiVorname:
          type: string
          maxLength: 30
          description: Vorname des Auszubildenden.
        AzubiWeitererVorname:
          type: string
          maxLength: 30
          description: Weitere Vornamen des Auszubildenden.
        AzubiGeschlecht:
          type: string
          enum:
            - WEIBLICH
            - MAENNLICH
            - DIVERS
            - UNBEKANNT
        AzubiGeburtsdatum:
          type: string
          format: date
          description: Geburtsdatum Auszubildender.
          example: "2024-05-01"
        AzubiGeburtsort:
          type: string
          maxLength: 30
          description: Geburtsort Auszubildender.
        AzubiStrasseHausnummer:
          type: string
          maxLength: 40
          description: Strasse und Hausnummer des Auszubildenden.
        AzubiPlz:
          type: string
          minLength: 5
          maxLength: 5
          pattern: '^\d{5}$'
          description: Postleitzahl des Auszubildenden.
        AzubiOrt:
          type: string
          maxLength: 30
          description: Ort des Auszubildenden.
        AzubiTelefon:
          type: string
          maxLength: 22
          description: Telefonnummer des Auszubildenden.
        AusbildungStatus:
          type: string
          enum:
            - ABGEBROCHEN
            - BESTANDEN
            - NICHT_BESTANDEN
            - AKTIV
            - REAKTIVIERT
          description: |
            - ABGEBROCHEN: Lehre abgebrochen
            - BESTANDEN: Lehre beendet - Prüfung bestanden
            - NICHT_BESTANDEN: Lehre beendet - Prüfung nicht bestanden
            - AKTIV: Lehre dauert an
            - REAKTIVIERT: Lehre nach Unterbrechung wiederaufgenommen
        AusbildungBeginn:
          type: string
          format: date
          description: Beginn der Ausbildung.
          example: "2022-05-01"
        AusbildungEndePlan:
          type: string
          format: date
          description: Geplantes Enddatum der Ausbildung.
          example: "2024-05-01"
        AusbildungEndeVerlaengerung:
          type: string
          format: date
          description: Geplantes Enddatum der Ausbildung nach Verlängerung.
          example: "2024-10-01"
        AusbildungEnde:
          type: string
          format: date
          description: Entspricht dem tatsächlichen Ende der Ausbildung (Datum der Gesellenprüfung).
          example: "2024-05-01"
        AusbildungVerkuerzung:
          type: integer
          minimum: 0
          maximum: 99
          description: Verkürzung der Ausbildungszeit in Monaten.
        AusbildungUmschulung:
          type: boolean
          description: Ausbildung im Rahmen einer Umschulung.
        AusbildungVertragRegistriernummer:
          type: string
          maxLength: 14
          description: Registriernummer des Ausbildungsvertrags bei der Handwerkskammer.
        AusbildungHandwerkskammerName:
          type: string
          maxLength: 30
          description: Name der Handwerkskammer, die den Ausbildungsvertrag registriert hat.
        BetriebId:
          type: string
          minLength: 7
          maxLength: 7
          pattern: '^\d7\d{5}$'
          description: Betriebskontonummer bei LAK. Muss aus genau 7 numerischen Zeichen aufgebaut sein. An zweiter Stelle steht die Ziffer 7.
          example: "0712345"
        BetriebName1:
          type: string
          maxLength: 35
          description: Erste Namenszeile der Firmenbezeichnung.
        BetriebName2:
          type: string
          maxLength: 35
          description: Zweite Namenzeile der Firmenbezeichnung.
        BetriebStrasseHausnummer:
          type: string
          maxLength: 30
          description: Strasse und Hausnummer des Betriebs.
        BetriebPlz:
          type: string
          minLength: 5
          maxLength: 5
          pattern: '^\d{5}$'
          description: Plz des Betriebs.
        BetriebOrt:
          type: string
          maxLength: 30
          description: Ort des Betriebs.
        BetriebDatenResync:
          type: boolean
          description: |
            - true: Firmendaten haben sich seit der letzten Syncronisation LAK-seitig geändert. 
                    Eine erneute Sychronisation ist erforderlich.
            - false: Sonst.
        AtUebernahme:
          type: boolean
          description: |
            - true: AT werden (zumindest teilweise) von der LAK bezahlt
            - false: AT werden von einem anderen Träger gezahlt (z.B. Arbeitsamt)
        AtBetragAndererTraeger:
          type: integer
          format: int64
          minimum: 0
          maximum: 99999999
          description: Höhe der Vergütung von Ausbildungstagewerken, die durch andere Träger gezahlt werden. Wertangabe in €-Cent.
        ItUebernahme:
          type: boolean
          description: |
            - true: Internatstage werden (zumindest teilweise) von der LAK bezahlt
            - false: Internatstage werden von einem anderen Träger gezahlt (z.B. Arbeitsamt)
        ItBetragAndererTraeger:
          type: integer
          format: int64
          minimum: 0
          maximum: 99999999
          description: Höhe der Vergütung von Internatstagen, die durch andere Träger gezahlt werden. Wertangabe in €-Cent.
        ApUebernahme:
          type: boolean
          description: |
            Übernahme der AP (Arbeitgeberpauschale) durch die LAK
            - true: AP wird (zumindest teilweise) von der LAK bezahlt
            - false: AP wird von einem anderen Träger gezahlt (z.B. Arbeitsamt)
        ApBetragAndererTraeger:
          type: integer
          format: int64
          minimum: 0
          maximum: 99999999
          description: |
            Höhe der Arbeitgeberpauschale, die durch andere Träger gezahlt werden. 
            LAK zahlt die Differenz zum gültigen Satz. Wertangabe in €-Cent.
        AzubiStatusGueltigBis:
          type: string
          format: date
          description: Ende des Gültigkeitszeitraums des Ausbildungsstatus.
          example: "2024-05-01"
        AzubiFehlerliste:
          type: array
          items:
            $ref: "#/components/schemas/AzubiFehler"
    AbrechnungsAbgleich:
      type: object
      properties:
        Header:
          $ref: "#/components/schemas/Kopfdatensatz"
        Abrechnungen:
          type: array
          items:
            $ref: "#/components/schemas/Abrechnung"
    Abrechnung:
      type: object
      required:
        - DatensatzId
        - AbrechnungStatus
        - AzubiSvNr
        - BetriebId
        - AzubiNachname
        - AzubiVorname
        - BetriebName1
        - BetriebPlz
        - BetriebOrt
        - KursTyp
        - KursBeginn
        - KursEnde
        - AtAnzahl
        - AtBetrag
        - ItAnzahl
        - ItBetrag
      properties:
        DatensatzId:
          type: string
          minLength: 12
          maxLength: 12
          pattern: '^\d{12}$'
          description: |
            Id des Datensatzes. Muss innerhalb des Datenpakets eindeutig sein und aus genau 12 
            numerischen Zeichen bestehen. Führende Nullen sind dabei erlaubt.
          example: "123002345678"
        AbrechnungStatus:
          type: string
          enum:
            - ANGEFORDERT
            - BESTAETIGT
            - ABGELEHNT
          description: |
            Status des Abrechnungsvorgangs:
             - ANGEFORDERT:  Abrechnung angefordert
             - BESTAETIGT:   Abrechnung bestätigt
             - ABGELEHNT:    Abrechnung abgelehnt - siehe Fehlercode
          example: "BESTAETIGT"
        AzubiSvNr:
          type: string
          maxLength: 12
          description: Sozialversicherungsnummer des Auszubildenden.
          example: "12123456M123"
        BetriebId:
          type: string
          minLength: 7
          maxLength: 7
          pattern: '^\d7\d{5}$'
          description: Betriebskontonummer bei LAK. Muss aus genau 7 numerischen Zeichen aufgebaut sein. An zweiter Stelle steht die Ziffer 7.
          example: "0712345"
        AzubiNachname:
          type: string
          maxLength: 30
          description: Nachname des Auszubildenden.
          example: "Mustermann"
        AzubiVorname:
          type: string
          maxLength: 30
          description: Vorname des Auszubildenden.
          example: "Max"
        BetriebName1:
          type: string
          maxLength: 35
          description: Erste Namenszeile der Anschrift des Ausbildungsbetriebes.
          example: "Beispiel-Bedachungen GmbH"
        BetriebName2:
          type: string
          maxLength: 35
          description: Zweite Namenszeile der Anschrift des Ausbildungsbetriebes.
        BetriebPlz:
          type: string
          minLength: 5
          maxLength: 5
          pattern: '^\d{5}$'
          description: Postleitzahl des Ausbildungsbetriebes.
          example: "65396"
        BetriebOrt:
          type: string
          maxLength: 30
          description: Ort des Ausbildungsbetriebes.
          example: "Eltville"
        KursTyp:
          type: string
          maxLength: 3
          description: Abkürzung des abzurechnenden Kurstyps.
          example: "G"
        KursNr:
          type: string
          maxLength: 10
          description: Kursnummer der Ausbildungsstätte.
        KursBeginn:
          type: string
          format: date
          description: Datum des ersten Lehrgangstags.
          example: "2024-05-01"
        KursEnde:
          type: string
          format: date
          description: Datum des letzten Lehrgangstags.
          example: "2024-07-01"
        AtAnzahl:
          type: integer
          minimum: 0
          maximum: 99
          description: Anzahl der Ausbildungstagewerke.
          example: 2
        AtBetrag:
          type: integer
          format: int64
          minimum: 0
          maximum: 99999999
          description: Erstattungsbetrag in Cent, der sich aus der Anzahl der Ausbildungstagewerke ergibt.
          example: 65200
        ItAnzahl:
          type: integer
          minimum: 0
          maximum: 99
          description: Anzahl an Internatstagen.
          example: 2
        ItBetrag:
          type: integer
          format: int64
          minimum: 0
          maximum: 99999999
          description: Erstattungsbetrag in Cent, der sich aus der Anzahl der Internatstage ergibt.
          example: 12000
        UmverteilungUeberstunden:
          type: boolean
          description: |
            - true: Die Ausbildungsstätte erklärt, dass sich die rechnerische Differenz von Kursbeginn und 
                    Kursende zu den abgerechneten Ausbildungstagewerken/Internatstagen durch "Überstunden" 
                    ergibt. Es wurden AT/IT auf den Kurszeitraum umverteilt. Dies kann z.B. bei Zeitknappheit
                    durch Feiertage der Fall sein. False sonst.
        BetriebDatenResync:
          type: boolean
          description: >
            - true: Firmendaten haben sich seit der letzten Synchronisation LAK-seitig geändert. Resynchronisation ist erforderlich. False sonst.
        AzubiDatenResync:
          type: boolean
          description: >
            - true: Azubidaten haben sich seit der letzten Synchronisation LAK-seitig geändert. Resynchronisation ist erforderlich.
        AbrechnungFehlerliste:
          type: array
          items:
            $ref: "#/components/schemas/AbrechnungFehler"
    AzubiFehler:
      type: object
      required:
        - FehlerCode
        - FehlerBeschreibung
      properties:
        FehlerCode:
          type: string
          enum:
            - FEHLER_AZUBIDATEN
            - FEHLER_AUSBILDUNGSBETRIEB
            - FEHLER_LEHRZEIT_ODER_ASSTATUS
            - FEHLER_AZUBI_ANDERER_BETRIEB_AKTIV
            - FEHLER_AZUBI_INAKTIV
            - FEHLER_AUSBILDUNGSBETRIEB_INAKTIV
            - FEHLER_LEHRZEIT_VOR_BETRIEBSEROEFFNUNG_LAK
          description: |
            - FEHLER_AZUBIDATEN:                          Fehler bei Azubidaten.
            - FEHLER_AUSBILDUNGSBETRIEB:                  Fehler bei Ausbildungsbetrieb.
            - FEHLER_LEHRZEIT_ODER_ASSTATUS:              Fehler bei Lehrzeit oder Astatus.
            - FEHLER_AZUBI_ANDERER_BETRIEB_AKTIV:         Azubi ist noch bei anderem Betrieb gemeldet und wurde dort nicht auf inaktiv gesetzt.
            - FEHLER_AZUBI_INAKTIV:                       Azubi ist bei diesem Betrieb als inaktiv gemeldet.
            - FEHLER_AUSBILDUNGSBETRIEB_INAKTIV:          Ausbildungsbetrieb ist inaktiv.
            - FEHLER_LEHRZEIT_VOR_BETRIEBSEROEFFNUNG_LAK: Lehrzeit beginnt vor Betriebseröffnung LAK.
        FehlerBeschreibung:
          type: string
    AbrechnungFehler:
      type: object
      required:
        - FehlerCode
        - FehlerBeschreibung
      properties:
        FehlerCode:
          type: string
          enum:
            - FEHLER_BEREITS_ABGERECHNET
            - FEHLER_MAXIMUM_AT_ERREICHT
            - FEHLER_KURSTYP_UNZULAESSIG
            - FEHLER_ZEITRAUM_UEBERSCHREITUNG
            - FEHLER_ANZAHL_AT_FEHLERHAFT
            - FEHLER_ANZAHL_IT_FEHLERHAFT
            - FEHLER_SUMME_AT_FEHLERHAFT
            - FEHLER_SUMME_IT_FEHLERHAFT
            - FEHLER_BANKVERBINDUNG
            - FEHLER_LEHRGANGSDATEN_AUSSERHALB_LEHRZEIT
            - FEHLER_AZUBI_UNBEKANNT
            - FEHLER_BETRIEBSKONTO_UNGUELTIG_UNBEKANNT
            - FEHLER_LEHRGANGSZEITRAUM_UNGUELTIG
            - FEHLER_AUBILDUNGSVERTRAG_LIEGT_NICHT_VOR
            - FEHLER_ABRECHNUNGSZEITRAUM_VERJAEHRT
            - FEHLER_BETRIEBSZUSTAND_NICHT_LAUFEND
            - FEHLER_AUSBILDUNGS_BETRIEBSDATEN_NICHT_VORHANDEN
            - FEHLER_BETRIEBSZUORDNUNG_NICHT_MOEGLICH
            - FEHLER_KOOPERATIONSVERTRAG
            - FEHLER_SCHULDATEN_FEHLERHAFT
          description: |
            - FEHLER_BEREITS_ABGERECHNET:                                     Bereits abgerechnet
            - FEHLER_MAXIMUM_AT_ERREICHT:                                     Maximum Ausbildungstagewerke erreicht
            - FEHLER_KURSTYP_UNZULAESSIG:                                     Kurstyp unzulässig
            - FEHLER_ZEITRAUM_UEBERSCHREITUNG:                                Zeitraumüberschneidung
            - FEHLER_ANZAHL_AT_FEHLERHAFT:                                    Anzahl Ausbildungstagewerke fehlerhaft
            - FEHLER_ANZAHL_IT_FEHLERHAFT:                                    Anzahl Internatstage fehlerhaft
            - FEHLER_SUMME_AT_FEHLERHAFT:                                     Summe Ausbildungstagewerke falsch
            - FEHLER_SUMME_IT_FEHLERHAFT:                                     Internatstage falsch
            - FEHLER_BANKVERBINDUNG:                                          Bankverbindung fehlerhaft
            - FEHLER_LEHRGANGSDATEN_AUSSERHALB_LEHRZEIT:                      Lehrgangsdaten außerhalb Lehrzeit
            - FEHLER_AZUBI_UNBEKANNT:                                         Lehrling unbekannt
            - FEHLER_BETRIEBSKONTO_UNGUELTIG_UNBEKANNT:                       Betriebskonto ungültig/unbekannt
            - FEHLER_LEHRGANGSZEITRAUM_UNGUELTIG:                             Lehrgangszeitraum ungültig
            - FEHLER_AUBILDUNGSVERTRAG_LIEGT_NICHT_VOR:                       Angeforderter Ausbildungsvertrag liegt nicht vor
            - FEHLER_ABRECHNUNGSZEITRAUM_VERJAEHRT:                           Abrechnungszeitraum verjährt
            - FEHLER_BETRIEBSZUSTAND_NICHT_LAUFEND:                           Betriebszustand nicht laufend
            - FEHLER_AUSBILDUNGS_BETRIEBSDATEN_NICHT_VORHANDEN:               Keine Ausbildungsdaten / Betrieb
            - FEHLER_BETRIEBSZUORDNUNG_NICHT_MOEGLICH:                        Keine Betriebszuordnung möglich
            - FEHLER_KOOPERATIONSVERTRAG:                                     Kooperationsvertrag
            - FEHLER_SCHULDATEN_FEHLERHAFT:                                   Schuldaten fehlerhaft
        FehlerBeschreibung:
          type: string
    ValidierungFehlerListe:
      type: object
      properties:
        Fehlerliste:
          type: array
          items:
            $ref: "#/components/schemas/ValidierungFehler"
    ValidierungFehler:
      type: object
      required:
        - FeldName
        - FeldInhalt
        - FehlerBeschreibung
        - AnfrageId
        - AbsenderId
        - ZeitpunktErstellung
      properties:
        DatensatzId:
          type: string
          minLength: 12
          maxLength: 12
          pattern: '^\d{12}$'
          description: |
            Id des Datensatzes. Muss innerhalb des Datenpakets eindeutig sein und aus genau 12 
            numerischen Zeichen bestehen. Führende Nullen sind dabei erlaubt.
          example: "123002345678"
        AnfrageId:
          type: string
          minLength: 6
          maxLength: 6
          pattern: '^\d{6}$'
          description: Id der Anfrage. Muss aus genau 6 numerischen Zeichen aufgebaut sein.
            Führende Nullen sind erlaubt.
          example: "012345"
        AbsenderId:
          minLength: 4
          maxLength: 4
          pattern: '^\d{4}$'
          type: string
          description: Id des Absenders. Muss aus genau 4 numerischen Zeichen aufgebaut sein.
            Führende Nullen sind erlaubt.
          example: "0123"
        ZeitpunktErstellung:
          type: string
          format: date-time
          description:
            Datum und Uhrzeit der Erstellung der Anfrage, auf die sich der Request bezieht.
            Die Uhrzeit ist stets auf eine Genauigkeit von Millisekunden anzugeben, um
            eine Zuordnung zum zugehörigen Datensatz zu ermöglichen.
          example: "2017-07-21T17:32:28.123Z"
        FeldName:
          type: string
          description: Name des Felds, in dem der Fehler aufgetreten ist.
        FeldInhalt:
          type: string
          description: Inhalt des Felds, in dem der Fehler aufgetreten ist.
        FehlerBeschreibung:
          type: string
          description: Beschreibung des Fehlers.
