API · v1 · stabil
CODEMETA OSDeveloper Center
Konsole öffnen
Entity · training_reports

Training Report (Ausbildungsnachweis) Schema

Schema-ID
training_report
Collection
training_reports
Permissions
  • Lesentraining_report_view
  • Anlegentraining_report_create
  • Änderntraining_report_edit
  • Löschentraining_report_delete

Felder

Training Report (Ausbildungsnachweis) Schema

training_reports4 Permissions

Monthly apprentice training report after the IHK Trier form. Filled by the apprentice, reviewed and approved by the team lead (Ausbilder). Status machine: draft → submitted → in_review → needs_revision → approved.

sequenceNumberintegeroptional

IHK "Ausbildungsnachweis Nr." — per-apprentice running number (1, 2, 3 …). Set at creation = count of the apprentice's existing reports + 1.

≥ 1read-onlynullable
apprenticeUserIduuiderforderlich

User UUID of the apprentice (Azubi) this report belongs to.

read-only
apprenticeProfileIduuidoptional

employee_profile UUID of the apprentice (denormalized for lookup).

read-onlynullable
apprenticeNamestringoptional

Vor- und Zuname — snapshot of the apprentice name at creation (auto-filled).

max 300 Zeichenread-onlynullable
ausbildungsberufstringoptional

Ausbildungsberuf, Fachrichtung (e.g. "Fachinformatiker für Anwendungsentwicklung"). Auto-filled from the profile qualification, apprentice-editable.

max 300 Zeichennullable
ausbildungsjahrstringoptional

Ausbildungsjahr as printed on the IHK form (e.g. "2025" — the year the training started). Free string, auto-filled from the hire year.

max 20 Zeichennullable
departmentstringoptional

Ausbildungsabteilung/-bereich during the reporting period (e.g. "Entwicklung").

max 300 Zeichennullable
locationstringoptional

Ausbildungs-Standort/Arbeitsort as a denormalized snapshot label (e.g. "Trier · 54290 Trier"), resolved from the apprentice profile workLocationId → legal-entity address at creation. Powers the reviewer "Standort" filter. Optional → null on reports created before this field existed (no backfill; the filter simply does not match those old drafts).

max 300 Zeichenread-onlynullable
periodobjecterforderlich

Reporting period — monthly. Drives the unique-per-month constraint.

read-only
yearintegererforderlich
2000 – 2100
monthintegererforderlich
1 – 12
periodLabelstringoptional

Human-readable period label (e.g. "Mai 2026"). Auto-filled.

max 50 Zeichenread-onlynullable
periodStartdateoptional

First day of the reporting period (ISO date). Auto-filled.

read-onlynullable
periodEnddateoptional

Last day of the reporting period (ISO date). Auto-filled.

read-onlynullable
reviewerIduuidoptional

User UUID of the reviewing team lead / Ausbilder. Resolved from the apprentice profile (ausbilderEmployeeId → userId, managerId fallback) at creation.

read-onlynullable
reviewerNamestringoptional

Snapshot of the assigned Ausbilder name (shown to the apprentice in their list). Auto-filled at creation.

max 300 Zeichenread-onlynullable
statusstringerforderlich

Workflow status. Transitions enforced by training-report.service.

draftsubmittedin_reviewneeds_revisionapproved
Default: "draft"read-only
activitiesstring[]optional

"Tätigkeiten diesen Monat" — one entry per bullet point (PLAIN; derived from activitiesHtml when the rich editor is used; authoritative for PDF/AI/reviewer offset-annotations).

Default: []nullable
activitiesHtmlstringoptional

Rich-text HTML body for the monthly activities list (sanitised).

max 80000 Zeichennullable
vocationalSchoolSubjectsHtmlstringoptional

Rich-text HTML for the vocational-school subjects list (sanitised).

max 40000 Zeichennullable
vocationalSchoolTopicsHtmlstringoptional

Rich-text HTML for the vocational-school topics list (sanitised).

max 60000 Zeichennullable
vocationalSchoolSubjectsstring[]optional

Berufsschule → Unterrichtsfächer (e.g. "FAE_L01", "Sport").

Default: []nullable
vocationalSchoolTopicsstring[]optional

Berufsschule → Unterrichtsthemen (one entry per topic line).

Default: []nullable
detailedTaskobjectoptional

Ausführliche Beschreibung einer Arbeitsaufgabe für diesen Monat.

nullable
topicstringoptional

Thema.

max 500 Zeichennullable
descriptionstringoptional

Long-form description of one work task (PLAIN text — derived from descriptionHtml when the rich editor is used; stays authoritative for PDF/AI/reviewer offset-annotations).

max 20000 Zeichennullable
descriptionHtmlstringoptional

Rich-text HTML body for the work-task description (sanitised).

max 80000 Zeichennullable
externalFileIdsstring[]optional

Externally uploaded report files (e.g. signed PDF, scanned sheet) via the file/DMS service.

Default: []nullable
sourcestringoptional

How the report is authored: "form" (default) = the structured IHK form, the SSoT for inline annotations / AI pre-check / search; "upload" = the apprentice uploaded a finished document (uploadedPdfFileId — PDF or Word) which IS the report document instead of the rendered form.

formupload
Default: "form"read-onlynullable
uploadedPdfFileIdstringoptional

When source="upload": file id (collection `files`, entityType `training_reports`) of the apprentice-uploaded source document served as the report document (download/preview) in place of the form render. Legacy name — the file may be a PDF or a Word document (see uploadedDocumentVersions[].mimeType). Kept as the downloadable original after a PDF→form extraction.

read-onlynullable
uploadedDocumentVersionsobject[]optional

Chronological stack of every uploaded report document (source="upload"). Each successful set-pdf upload appends an entry; the last entry is the active document (uploadedPdfFileId). Lets the apprentice and reviewer see and download previous versions after a re-upload. Optional → absent/empty on reports whose single upload predates this field (fall back to uploadedPdfFileId, assumed PDF).

Default: []read-onlynullable
idstringoptional

Stable version entry id (UUID).

fileIdstringerforderlich

files-collection id of this uploaded document version.

fileNamestringoptional
max 500 Zeichennullable
mimeTypestringoptional

MIME type of the uploaded file (e.g. "application/pdf" or a Word type). Drives inline-preview vs. download-only in the UI.

max 200 Zeichennullable
fileSizeintegeroptional
≥ 0nullable
uploadedAtdatetimeoptional
nullable
uploadedByuuidoptional
nullable
uploadedByNamestringoptional
max 300 Zeichennullable
pdfExtractionStatusstringoptional

State of the manual "Felder aus PDF erkennen" job (OCR + LLM that parses the uploaded PDF into the form fields, then flips source=upload → form). Null = never run.

pendingcompletedfailed
read-onlynullable
pdfExtractionFeedbackstringoptional

Error / completion message from the PDF field-extraction job.

max 5000 Zeichenread-onlynullable
submittedAtdatetimeoptional

When the apprentice submitted the report.

read-onlynullable
reviewedAtdatetimeoptional

When the team lead approved or sent back the report.

read-onlynullable
reviewedByuuidoptional

User UUID of the reviewer who took the last review action.

read-onlynullable
revisionCountintegeroptional

How often the report has been sent back for revision.

≥ 0Default: 0read-only
reviewFeedbackstringoptional

Overall feedback text from the team lead (shown to the apprentice).

max 10000 Zeichenread-onlynullable
reviewAnnotationsobject[]optional

Inline text-passage markups by the reviewer: the apprentice sees these anchored comments on return.

Default: []read-onlynullable
idstringoptional

Stable annotation id (UUID).

fieldPathstringoptional

Path of the annotated text field (e.g. "detailedTask.description", "activities.0").

max 200 Zeichennullable
quotestringoptional

Snapshot of the marked text — render fallback if offsets drift.

max 10000 Zeichennullable
startOffsetintegeroptional

Character start offset of the marked range within the field text.

≥ 0nullable
endOffsetintegeroptional

Character end offset (exclusive) of the marked range.

≥ 0nullable
commentstringerforderlich

What is wrong / how to fix.

max 5000 Zeichen
resolvedbooleanoptional

Whether the apprentice has addressed this annotation.

Default: falsenullable
createdAtdatetimeoptional
read-onlynullable
createdByuuidoptional
read-onlynullable
apprenticeSignatureobjectoptional

Digital signature captured when the apprentice submits ("für die Richtigkeit" — IHK "Unterschrift des Auszubildenden"). Drawn online, uploaded as an image, or typed.

read-onlynullable
signedByuuidoptional
nullable
signedByNamestringoptional
max 300 Zeichennullable
signedAtdatetimeoptional
nullable
methodstringoptional
drawntypeduploaded
nullable
imagestringoptional
max 1500000 Zeichennullable
typedNamestringoptional
max 300 Zeichennullable
approvalSignatureobjectoptional

Digital signature captured when the reviewer approves the report (IHK "Unterschrift des Ausbildenden").

read-onlynullable
signedByuuidoptional
nullable
signedByNamestringoptional
max 300 Zeichennullable
signedAtdatetimeoptional
nullable
methodstringoptional
drawntypeduploaded
nullable
imagestringoptional
max 1500000 Zeichennullable
typedNamestringoptional
max 300 Zeichennullable
lastReminderAtdatetimeoptional

When the reviewer last sent the apprentice a reminder for this report.

read-onlynullable
reminderCountintegeroptional

How many reminders the reviewer has sent for this report.

≥ 0Default: 0read-only
aiReviewStatusstringoptional

State of the manual AI pre-check. Null = never run.

pendingcompletedfailed
read-onlynullable
aiReviewFeedbackstringoptional

AI summary of the report quality.

max 20000 Zeichenread-onlynullable
aiReviewStrengthsstring[]optional

What the apprentice did well (AI).

Default: []read-onlynullable
aiReviewIssuesobject[]optional

Problems / gaps the AI found.

Default: []read-onlynullable
textstringerforderlich
max 5000 Zeichen
sectionRefstringoptional
max 200 Zeichennullable
aiReviewSuggestionsstring[]optional

Actionable improvement suggestions (AI).

Default: []read-onlynullable
aiReviewCriteriaobject[]optional

Per-criterion verdict of the AI pre-check (spelling, accuracy, completeness, clarity) — drives the "Geprüft wird" result list in the reviewer UI.

Default: []read-onlynullable
keystringerforderlich
spellingaccuracycompletenessclarity
ratingstringerforderlich
goodwarningcritical
summarystringoptional
max 2000 Zeichennullable
aiReviewScorenumberoptional

Suggested quality score 0–100 (AI). Advisory only — no grading.

0 – 100read-onlynullable
aiReviewConfidencenumberoptional

AI confidence 0.0–1.0.

0 – 1read-onlynullable
aiReviewedAtdatetimeoptional

When the AI pre-check completed.

read-onlynullable
pdfFileIdstringoptional

File id of the generated, signed IHK PDF (collection `files`, entityType `training_report`). Created on approval; the apprentice can download it afterwards via GET /training-reports/:id/download.

read-onlynullable

Standard-Endpoints

Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:

  • GET /api/v1/training_reports — Liste, paginiert + filterbar
  • GET /api/v1/training_reports/<id> — Einzelne Entity
  • POST /api/v1/training_reports — Anlegen
  • PATCH /api/v1/training_reports/<id> — Teil-Update
  • DELETE /api/v1/training_reports/<id> — Soft-Delete
  • GET /api/v1/training_reports/<id>/timeline — Audit + Aktivitäten

Suche