{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/Task",
  "title": "Task",
  "externalDocs": {
    "url": "https://developer.xero.com/documentation/projects/projects"
  },
  "type": "object",
  "properties": {
    "taskId": {
      "type": "string",
      "format": "uuid",
      "example": "00000000-0000-0000-000-000000000000",
      "description": "Identifier of the task."
    },
    "name": {
      "type": "string",
      "description": "Name of the task."
    },
    "rate": {
      "$ref": "#/components/schemas/Amount",
      "type": "number"
    },
    "chargeType": {
      "$ref": "#/components/schemas/ChargeType",
      "type": "string"
    },
    "estimateMinutes": {
      "type": "integer",
      "description": "An estimated time to perform the task"
    },
    "projectId": {
      "type": "string",
      "format": "uuid",
      "example": "00000000-0000-0000-000-000000000000",
      "description": "Identifier of the project task belongs to."
    },
    "totalMinutes": {
      "type": "integer",
      "description": "Total minutes which have been logged against the task. Logged by assigning a time entry to a task"
    },
    "totalAmount": {
      "$ref": "#/components/schemas/Amount",
      "type": "number"
    },
    "minutesInvoiced": {
      "type": "integer",
      "description": "Minutes on this task which have been invoiced."
    },
    "minutesToBeInvoiced": {
      "type": "integer",
      "description": "Minutes on this task which have not been invoiced."
    },
    "fixedMinutes": {
      "type": "integer",
      "description": "Minutes logged against this task if its charge type is `FIXED`."
    },
    "nonChargeableMinutes": {
      "type": "integer",
      "description": "Minutes logged against this task if its charge type is `NON_CHARGEABLE`."
    },
    "amountToBeInvoiced": {
      "$ref": "#/components/schemas/Amount",
      "type": "number"
    },
    "amountInvoiced": {
      "$ref": "#/components/schemas/Amount",
      "type": "number"
    },
    "status": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "INVOICED",
        "LOCKED"
      ],
      "description": "Status of the task. When a task of ChargeType is `FIXED` and the rate amount is invoiced the status will be set to `INVOICED` and can't be modified. A task with ChargeType of `TIME` or `NON_CHARGEABLE` cannot have a status of `INVOICED`. A `LOCKED` state indicates that the task is currently changing state (for example being invoiced) and can't be modified."
    }
  }
}