Generated output · document language
nlOne document model, on paper
The month table on the timesheet screen and the exported PDF are both rendered from
GET /api/timesheets/{id}/document. These four sheets are the same structure in four states, so
the omission rules cannot disagree between screen and paper. Interface language stays English everywhere
else in the product — including the chrome around this preview.
Label bundle (nl)
no label literal is allowed in the rendererWhat the paper proves
- Invoice reference on every artifact, at the value it had when generated — the join key for the Peppol application, and nothing else about invoicing.
- Overtime is a visibly separate row for the same date, never merged into the regular line, and never appears unless someone entered it.
- Summary column absent when no regular or overtime summary exists; clock columns absent when the client's policy is off.
- Totals as durations and day equivalents — no rate, no amount, no VAT.
- Identity block from the timesheet's own Party Details snapshot, with a text-only fallback when no logo exists.
- Superseded artifacts keep their bytes: the stamp is applied by the viewer for this preview, never written into the stored PDF.
Design notes — document
- GAP-02 Column omission and the overtime row exist once, server-side, consumed by both renderers. This page is the argument for that rule.
- DOC-01 / DOC-02 Document language comes from the client override, else the workspace preference — and it is snapshotted, so a later preference change cannot alter a stored artifact.
- DEC-12 The zero-entry variant is a real state, not an error: the PDF shows zero totals and the UI warned beforehand.
- CP-03 Logo present in the two first variants, absent in the bare one — the same renderer, different identity block.
- DEC-13 In the product this is produced server-side (QuestPDF recommended, PDFsharp fallback). This HTML is the layout reference, not the implementation.