Workspace
Company profile
The one company that performs the work. Its identity is copied into every new Monthly Timesheet; the optional logo is what makes a generated timesheet look like it came from you.
Legal identity & contact
all optional except the legal nameCompany logo
optional · PNG, JPEG or WebP · 2 MB capSVG is excluded on purpose: the logo is inlined into a rendered document, and an
external SVG is a rendering risk. The stored blob is profile metadata, so replacing it is allowed —
artifact immutability covers generated timesheets only.
Identity as printed
exactly the artifact header areaConsultant default
GAP-01A new Monthly Timesheet starts with this Consultant:
—
…because it defaults to the legal name. On a Draft timesheet the field can be overridden, and the override survives a snapshot refresh.
| March 2026 · De Kelder | Draft overridden → “Elena Verhaegen” |
| March 2026 · Hazelnoot | Exported legal name |
If you want a separate “Consultant” field on this profile
instead of reusing the legal name, that is a Company Profile column added now, not a later patch.
Where each field lands
| Field | On a timesheet | On paper |
|---|---|---|
| Legal name | Party Details snapshot | Document header |
| VAT number | Party Details snapshot | Document header |
| Address / postal / city / country | Party Details snapshot | Document header |
| Email · phone · website | Party Details snapshot | Footer, if present |
| Logo | Not snapshotted (profile metadata) | Header image when present at export time |
Design notes — Company
- CP-01/CP-02 One profile, no list. “Company” would be ambiguous with “Client”, so the nav says Company profile.
- CP-03 Logo presence changes what is printed; the preview shows both branches and the second tab forces the text-only fallback.
- GAP-01 The Consultant default is stated out loud, next to the field it comes from, because it is a schema question, not a UI question.
- AC-P1-02 An empty or whitespace-only legal name answers 422 and keeps the previous name.
- TS-05 Removing the logo cannot touch an artifact that already exists — say so where the Remove button lives.