Training Report (Ausbildungsnachweis) Schema
Felder
Training Report (Ausbildungsnachweis) Schema
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.
sequenceNumber
IHK "Ausbildungsnachweis Nr." — per-apprentice running number (1, 2, 3 …). Set at creation = count of the apprentice's existing reports + 1.
apprenticeUserId
User UUID of the apprentice (Azubi) this report belongs to.
apprenticeProfileId
employee_profile UUID of the apprentice (denormalized for lookup).
apprenticeName
Vor- und Zuname — snapshot of the apprentice name at creation (auto-filled).
ausbildungsberuf
Ausbildungsberuf, Fachrichtung (e.g. "Fachinformatiker für Anwendungsentwicklung"). Auto-filled from the profile qualification, apprentice-editable.
ausbildungsjahr
Ausbildungsjahr as printed on the IHK form (e.g. "2025" — the year the training started). Free string, auto-filled from the hire year.
department
Ausbildungsabteilung/-bereich during the reporting period (e.g. "Entwicklung").
location
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).
periodLabel
Human-readable period label (e.g. "Mai 2026"). Auto-filled.
periodStart
First day of the reporting period (ISO date). Auto-filled.
periodEnd
Last day of the reporting period (ISO date). Auto-filled.
reviewerId
User UUID of the reviewing team lead / Ausbilder. Resolved from the apprentice profile (ausbilderEmployeeId → userId, managerId fallback) at creation.
reviewerName
Snapshot of the assigned Ausbilder name (shown to the apprentice in their list). Auto-filled at creation.
status
Workflow status. Transitions enforced by training-report.service.
draftsubmittedin_reviewneeds_revisionapprovedactivities
"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).
activitiesHtml
Rich-text HTML body for the monthly activities list (sanitised).
vocationalSchoolSubjectsHtml
Rich-text HTML for the vocational-school subjects list (sanitised).
vocationalSchoolTopicsHtml
Rich-text HTML for the vocational-school topics list (sanitised).
vocationalSchoolSubjects
Berufsschule → Unterrichtsfächer (e.g. "FAE_L01", "Sport").
vocationalSchoolTopics
Berufsschule → Unterrichtsthemen (one entry per topic line).
detailedTask
Ausführliche Beschreibung einer Arbeitsaufgabe für diesen Monat.
topic
Thema.
description
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).
descriptionHtml
Rich-text HTML body for the work-task description (sanitised).
externalFileIds
Externally uploaded report files (e.g. signed PDF, scanned sheet) via the file/DMS service.
source
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.
formuploaduploadedPdfFileId
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.
uploadedDocumentVersions
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).
id
Stable version entry id (UUID).
fileId
files-collection id of this uploaded document version.
fileName
mimeType
MIME type of the uploaded file (e.g. "application/pdf" or a Word type). Drives inline-preview vs. download-only in the UI.
fileSize
uploadedAt
uploadedBy
uploadedByName
pdfExtractionStatus
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.
pendingcompletedfailedpdfExtractionFeedback
Error / completion message from the PDF field-extraction job.
submittedAt
When the apprentice submitted the report.
reviewedAt
When the team lead approved or sent back the report.
reviewedBy
User UUID of the reviewer who took the last review action.
revisionCount
How often the report has been sent back for revision.
reviewFeedback
Overall feedback text from the team lead (shown to the apprentice).
reviewAnnotations
Inline text-passage markups by the reviewer: the apprentice sees these anchored comments on return.
id
Stable annotation id (UUID).
fieldPath
Path of the annotated text field (e.g. "detailedTask.description", "activities.0").
quote
Snapshot of the marked text — render fallback if offsets drift.
startOffset
Character start offset of the marked range within the field text.
endOffset
Character end offset (exclusive) of the marked range.
comment
What is wrong / how to fix.
resolved
Whether the apprentice has addressed this annotation.
createdAt
createdBy
apprenticeSignature
Digital signature captured when the apprentice submits ("für die Richtigkeit" — IHK "Unterschrift des Auszubildenden"). Drawn online, uploaded as an image, or typed.
lastReminderAt
When the reviewer last sent the apprentice a reminder for this report.
reminderCount
How many reminders the reviewer has sent for this report.
aiReviewStatus
State of the manual AI pre-check. Null = never run.
pendingcompletedfailedaiReviewFeedback
AI summary of the report quality.
aiReviewStrengths
What the apprentice did well (AI).
aiReviewIssues
Problems / gaps the AI found.
text
sectionRef
aiReviewSuggestions
Actionable improvement suggestions (AI).
aiReviewScore
Suggested quality score 0–100 (AI). Advisory only — no grading.
aiReviewConfidence
AI confidence 0.0–1.0.
aiReviewedAt
When the AI pre-check completed.
pdfFileId
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.
Keine Felder passen zum Filter.
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 + filterbarGET /api/v1/training_reports/<id>— Einzelne EntityPOST /api/v1/training_reports— AnlegenPATCH /api/v1/training_reports/<id>— Teil-UpdateDELETE /api/v1/training_reports/<id>— Soft-DeleteGET /api/v1/training_reports/<id>/timeline— Audit + Aktivitäten