{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Timesheet","description":"Hours worked in a period, in decimal hours, for one of two uses chosen by the user: the internal record of a worker's hours, or the statement of hours sent to a client. The kind of each entry is the employer's own statement; no hour is qualified, no supplement is applied and the amount is printed as typed.","additionalProperties":false,"required":["sheet","company","worker","entries","totals"],"properties":{"sheet":{"type":"object","additionalProperties":false,"required":["use","period_start","period_end"],"properties":{"use":{"type":"string","enum":["internal_record","client_statement"],"description":"What the sheet is: the internal record of a worker's hours, or the statement of hours sent to a client. No default."},"period_start":{"type":"string","format":"date","description":"First day of the period."},"period_end":{"type":"string","format":"date","description":"Last day of the period."}}},"company":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"description":"Name of the company (or sole trader) that draws up the sheet."},"enterprise_number":{"type":"string","description":"Belgian enterprise number (BCE / KBO) (optional; printed when the sheet is sent to a client)."},"registered_office":{"type":"string","description":"Domiciliation: address of the registered office (optional; printed when the sheet is sent to a client)."},"payment_account":{"type":"string","description":"Number (IBAN) of at least one payment account of the company (optional; printed when the sheet is sent to a client)."},"seat_region":{"type":"string","enum":["nl_region","fr_region","brussels","de_region"],"description":"Linguistic region of the employer's operating seat (optional): Dutch-language region, French-language region, Brussels-Capital or German-language region. Nothing is compared with it."}}},"worker":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"description":"Name of the worker (or of the consultant)."},"employee_id":{"type":"string","description":"Employee number or other internal identifier (optional)."}}},"client":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Name of the client (optional)."},"project":{"type":"string","description":"Project or assignment (optional)."},"enterprise_number":{"type":"string","description":"Belgian enterprise number (BCE / KBO) of the client (optional)."}}},"entries":{"type":"array","minItems":1,"description":"The entries of the sheet, one per day or per assignment.","items":{"type":"object","additionalProperties":false,"required":["date","hours","description"],"properties":{"date":{"type":"string","format":"date","description":"Date of the entry."},"start":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Start time HH:MM (optional)."},"end":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"End time HH:MM (optional)."},"break_minutes":{"type":"number","minimum":0,"description":"Break in minutes (optional)."},"hours":{"type":"number","minimum":0,"description":"Hours of the entry in decimal hours (for example 7.5)."},"kind":{"type":"string","enum":["normal","overtime_as_stated_by_employer","night","sunday_holiday","on_call","travel","other"],"description":"Kind of hours as the employer states it (optional); nothing is derived from it."},"description":{"type":"string","minLength":1,"description":"What was done."},"project":{"type":"string","description":"Project or client of the entry (optional)."}}}},"totals":{"type":"object","additionalProperties":false,"required":["total_hours"],"properties":{"total_hours":{"type":"number","minimum":0,"description":"Total hours of the sheet, typed by the user (checked against the entries)."}}},"billing":{"type":"object","additionalProperties":false,"dependentRequired":{"hourly_rate":["total_amount"]},"properties":{"hourly_rate":{"type":"number","minimum":0,"description":"Hourly rate (optional; printed when the sheet is sent to a client)."},"currency":{"type":"string","enum":["EUR"],"description":"Currency of the amounts (optional)."},"total_amount":{"type":"number","minimum":0,"description":"Total amount, typed by the user (required when an hourly rate is given); it is printed as typed and not checked."},"vat_mention":{"type":"string","description":"Mention on VAT (optional); the invoice carries the VAT, not this sheet."}}},"approval":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Name of the person who approves the sheet (optional)."},"date":{"type":"string","format":"date","description":"Date of approval (optional)."}}},"worker_signature_date":{"type":"string","format":"date","description":"Date of the worker's signature (optional)."},"notes":{"type":"string","description":"Free remarks (optional)."}}}