# TaskViewModel

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "ID único",
      "format": "uuid"
    },
    "priority": {
      "type": "number",
      "description": "Prioridade da tarefa (1-10)",
      "minimum": 1,
      "maximum": 10
    },
    "status": {
      "type": "string",
      "description": "Status atual",
      "enum": [
        "NOT_STARTED",
        "STARTED",
        "PAUSED",
        "FINISHED",
        "PENDING",
        "CANCELED",
        "REQUESTED"
      ]
    },
    "createdAt": {
      "type": "string",
      "description": "Data de criação",
      "format": "date-time"
    },
    "spentedTime": {
      "type": "integer",
      "description": "Tempo gasto executando a tarefa"
    },
    "title": {
      "type": "string",
      "description": "Título da tarefa"
    },
    "userRequesterId": {
      "type": "string",
      "description": "ID do usuário solicitante",
      "format": "uuid"
    },
    "userRequester": {
      "description": "Informações do usuário solicitante",
      "allOf": [
        {
          "$ref": "#/components/schemas/UserViewModel"
        }
      ]
    },
    "userExecutorId": {
      "type": "string",
      "description": "ID do usuário executor",
      "format": "uuid"
    },
    "userExecutor": {
      "description": "Informações do usuário executor",
      "allOf": [
        {
          "$ref": "#/components/schemas/UserViewModel"
        }
      ]
    },
    "description": {
      "type": "string",
      "description": "Descrição da tarefa",
      "nullable": true
    },
    "endedAt": {
      "type": "string",
      "description": "Data de término planejada",
      "format": "date-time",
      "nullable": false
    },
    "departmentId": {
      "type": "string",
      "description": "ID do departamento",
      "format": "uuid",
      "nullable": false
    },
    "departmentGroupId": {
      "type": "string",
      "description": "ID do sub-espaço (grupo) ao qual a tarefa pertence",
      "format": "uuid",
      "nullable": true
    },
    "finishedAt": {
      "type": "string",
      "description": "Se a tarefa foi finalizada, será listado a data de finalização",
      "format": "date-time",
      "nullable": true
    },
    "pendencies": {
      "description": "Se a tarefa tiver uma pendência, será listado o vinculo dessa pendência como por exemplo executar outra tarefa antes de executar essa tarefa",
      "nullable": true,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/TaskPendencyViewModel"
      }
    },
    "projectId": {
      "type": "string",
      "description": "ID do projeto",
      "format": "uuid",
      "nullable": true
    },
    "startedAt": {
      "type": "string",
      "description": "Data de início planejada",
      "format": "date-time"
    },
    "taskNumber": {
      "type": "number",
      "description": "Número da tarefa (único)"
    },
    "type": {
      "type": "string",
      "description": "Tipo da tarefa (TASK | BUG)",
      "enum": [
        "TASK",
        "BUG"
      ],
      "nullable": false
    },
    "comments": {
      "description": "Comentários da tarefa, retornado apenas quando solicitado via join=comments",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/TaskCommentViewModel"
      }
    },
    "checklist": {
      "description": "Itens do checklist da tarefa, retornado apenas quando solicitado via join=checklist",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/TaskChecklistItemViewModel"
      }
    },
    "progress": {
      "type": "integer",
      "description": "Percentual agregado assistido (0-100) quando a tarefa é de curso; atualizado pela CEFIS",
      "minimum": 0,
      "maximum": 100,
      "nullable": true
    },
    "courses": {
      "description": "Cursos da CEFIS vinculados à tarefa (vazio quando não é tarefa de curso)",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/TaskCourseViewModel"
      }
    }
  },
  "required": [
    "id",
    "priority",
    "status",
    "createdAt",
    "spentedTime",
    "title",
    "userRequesterId",
    "userRequester",
    "userExecutorId",
    "userExecutor",
    "endedAt",
    "departmentId",
    "startedAt",
    "taskNumber",
    "type",
    "courses"
  ]
}
```
