{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/assignar/main/json-schema/assignar-timesheet-expanded-schema.json", "title": "TimesheetExpanded", "x-generated": "2026-09-26", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/assignar-openapi.yaml#/components/schemas/TimesheetExpanded", "type": "object", "properties": { "id": { "type": "integer" }, "client_id": { "type": "integer" }, "user_id": { "type": "integer" }, "project_id": { "type": "integer" }, "task_id": { "type": "integer" }, "location": { "type": [ "string", "null" ] }, "order_id": { "type": [ "integer", "null" ] }, "supplier_id": { "type": [ "integer", "null" ] }, "job_number": { "type": [ "string", "null" ] }, "start_time": { "type": "string" }, "start_datetime": { "type": [ "string", "null" ], "format": "date-time" }, "end_time": { "type": "string" }, "end_datetime": { "type": [ "string", "null" ], "format": "date-time" }, "total_time": { "type": "string" }, "comments": { "type": "string" }, "office_use": { "type": [ "string", "null" ] }, "submitted_date": { "type": "string", "format": "date" }, "date_of_creation": { "type": "string", "format": "date-time" }, "created_by_id": { "type": "integer" }, "modified_time": { "type": "string", "format": "date-time" }, "modified_by": { "type": "string" }, "submitted_by": { "type": [ "string", "null" ] }, "latitude": { "type": "number", "format": "float" }, "longitude": { "type": "number", "format": "float" }, "latitude2": { "type": [ "number", "null" ], "format": "float" }, "longitude2": { "type": [ "number", "null" ], "format": "float" }, "signature_name": { "type": [ "string", "null" ] }, "signature_url": { "$ref": "#/$defs/UrlAttachment", "nullable": true }, "client_signature_name": { "type": [ "string", "null" ] }, "client_signature_url": { "$ref": "#/$defs/UrlAttachment", "nullable": true }, "document_url": { "$ref": "#/$defs/UrlAttachment", "nullable": true, "description": "Signed URL for the auto-generated timesheet PDF. Refreshed every time the timesheet is created, updated, approved, processed, or its site diary is signed. Null for timesheets that have not been mutated since the feature was introduced.\n" }, "completed_at": { "type": [ "string", "null" ], "format": "date-time" }, "completed_by_id": { "type": [ "integer", "null" ] }, "processed_by_id": { "type": [ "integer", "null" ] }, "processed_at": { "type": [ "string", "null" ], "format": "date-time" }, "deleted_time": { "type": [ "string", "null" ], "format": "date-time" }, "integration_id": { "type": [ "string", "null" ] }, "status": { "type": "string" }, "client": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "external_id": { "type": "string" } } }, "project": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "external_id": { "type": "string" } } }, "task": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "external_id": { "type": "string" } } }, "user": { "type": [ "object", "null" ], "properties": { "user_id": { "type": "integer" }, "username": { "type": "string" }, "full_name": { "type": "string" }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "employee_id": { "type": "string" }, "employment_type_id": { "type": "integer" }, "email": { "type": "string" } } }, "supplier": { "type": [ "object", "null" ], "properties": { "name": { "type": "string" }, "external_id": { "type": "string" } } }, "order": { "type": [ "object", "null" ], "properties": { "id": { "type": "integer" }, "job_number": { "type": "string" }, "job_description": { "type": "string" } } }, "digitaldocket": { "type": [ "object", "null" ] }, "activity_entries": { "type": "array", "items": { "$ref": "#/$defs/ActivityEntry" } }, "asset_entries": { "type": "array", "items": { "$ref": "#/$defs/AssetEntry" } }, "leave_request_entries": { "type": "array", "items": { "$ref": "#/$defs/LeaveRequestEntry" } }, "docket": { "type": [ "object", "null" ], "properties": { "id": { "type": "integer" }, "docket_id": { "type": "integer" }, "timesheet_id": { "type": "integer" }, "docket": { "type": "object", "properties": { "id": { "type": "integer" }, "number": { "type": "string" }, "image": { "type": "string" } } } } }, "allowances": { "type": "array", "items": { "$ref": "#/$defs/TimesheetExpandedAllowance" } }, "site_diary": { "type": [ "object", "null" ], "properties": { "id": { "type": "integer" }, "client_signature_name": { "type": [ "string", "null" ] }, "supervisor_signature_name": { "type": [ "string", "null" ] }, "client_signature_url": { "$ref": "#/$defs/UrlAttachment", "nullable": true }, "supervisor_signature_url": { "$ref": "#/$defs/UrlAttachment", "nullable": true } } } }, "$defs": { "ActivityEntry": { "type": "object", "properties": { "id": { "type": "integer" }, "start_at": { "type": [ "string", "null" ], "format": "date-time" }, "start_at_tz": { "type": [ "string", "null" ] }, "end_at": { "type": [ "string", "null" ], "format": "date-time" }, "end_at_tz": { "type": [ "string", "null" ] }, "start_at_naive": { "type": [ "string", "null" ] }, "end_at_naive": { "type": [ "string", "null" ] }, "is_naive_datetime": { "type": "boolean" }, "created_at": { "type": "string", "format": "date-time" }, "modified_at": { "type": "string", "format": "date-time" }, "duration": { "type": "integer", "description": "Duration in minutes" }, "activity": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "external_id": { "type": "string" }, "is_payable": { "type": "boolean" } } }, "created_by": { "$ref": "#/$defs/UserReference" }, "modified_by": { "$ref": "#/$defs/UserReference" }, "related_asset_entries": { "type": "array", "items": { "$ref": "#/$defs/RelatedAssetEntry" } } } }, "AssetClass": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "description": { "type": [ "string", "null" ] }, "code": { "type": [ "string", "null" ] } } }, "AssetEntry": { "type": "object", "properties": { "id": { "type": "integer" }, "start_at": { "type": [ "string", "null" ], "format": "date-time" }, "start_at_tz": { "type": [ "string", "null" ] }, "end_at": { "type": [ "string", "null" ], "format": "date-time" }, "end_at_tz": { "type": [ "string", "null" ] }, "start_at_naive": { "type": [ "string", "null" ] }, "end_at_naive": { "type": [ "string", "null" ] }, "is_naive_datetime": { "type": "boolean" }, "created_at": { "type": "string", "format": "date-time" }, "modified_at": { "type": "string", "format": "date-time" }, "duration": { "type": "integer", "description": "Duration in minutes" }, "uses_whole_shift": { "type": "boolean" }, "asset": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "external_id": { "type": "string" }, "description": { "type": "string" }, "make": { "type": "string" }, "model": { "type": "string" }, "year": { "type": "string" }, "assetClass": { "$ref": "#/$defs/AssetClass" } } }, "created_by": { "$ref": "#/$defs/UserReference" }, "modified_by": { "$ref": "#/$defs/UserReference" } } }, "LeaveRequestEntry": { "type": "object", "properties": { "id": { "type": "integer" }, "start_at": { "type": [ "string", "null" ], "format": "date-time" }, "start_at_tz": { "type": [ "string", "null" ] }, "end_at": { "type": [ "string", "null" ], "format": "date-time" }, "end_at_tz": { "type": [ "string", "null" ] }, "start_at_naive": { "type": [ "string", "null" ] }, "end_at_naive": { "type": [ "string", "null" ] }, "is_naive_datetime": { "type": "boolean" }, "created_at": { "type": "string", "format": "date-time" }, "modified_at": { "type": "string", "format": "date-time" }, "duration": { "type": "integer", "description": "Duration in minutes" }, "leave_type": { "type": "object", "properties": { "id": { "type": "integer" }, "type": { "type": "string" }, "label": { "type": "string" }, "code": { "type": "string" } } }, "created_by": { "$ref": "#/$defs/UserReference" }, "modified_by": { "$ref": "#/$defs/UserReference" } } }, "RelatedAssetEntry": { "type": "object", "properties": { "id": { "type": "integer" }, "asset_entry_id": { "type": "integer" }, "activity_asset_usage_minutes": { "type": "integer" }, "created_at": { "type": "string", "format": "date-time" }, "modified_at": { "type": "string", "format": "date-time" }, "asset": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "external_id": { "type": "string" }, "assetClass": { "$ref": "#/$defs/AssetClass" } } }, "created_by": { "$ref": "#/$defs/UserReference" }, "modified_by": { "$ref": "#/$defs/UserReference" } } }, "TimesheetExpandedAllowance": { "type": "object", "properties": { "id": { "type": "integer" }, "timesheet_id": { "type": "integer" }, "allowance_id": { "type": "integer" }, "quantity": { "type": "number", "format": "float" }, "allowance": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "active": { "type": "boolean" }, "code": { "type": "string" } } } } }, "UrlAttachment": { "type": "object", "readOnly": true, "properties": { "url": { "type": "string", "format": "url", "description": "Download URL for the file." }, "expiry": { "type": "integer", "description": "Expiry date of the download url in timestamp." } } }, "UserReference": { "type": "object", "properties": { "user_id": { "type": "integer" }, "username": { "type": "string" }, "first_name": { "type": "string" }, "last_name": { "type": "string" } } } } }