> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encord.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflow.stages.consensus review

## ConsensusReviewStage Objects

```python theme={"dark"}
class ConsensusReviewStage(WorkflowStageBase)
```

#### stage\_type

The Review stage for Consensus Workflows.

#### get\_tasks

```python theme={"dark"}
def get_tasks(
    *,
    assignee: Union[List[str], str, None] = None,
    data_hash: Union[List[UUID], UUID, List[str], str, None] = None,
    dataset_hash: Union[List[UUID], UUID, List[str], str, None] = None,
    data_title: Optional[str] = None,
    status: Union[ConsensusReviewTaskStatus, List[ConsensusReviewTaskStatus],
                  None] = None
) -> Iterable[ConsensusReviewTask]
```

Retrieves tasks for the ConsensusReviewStage.

**Parameters**

* `assignee` (Union\[List\[str], str, None]): A list of user emails or a single user email to filter tasks by assignee.
* `data_hash` (Union\[List\[UUID], UUID, List\[str], str, None]): A list of data unit UUIDs or a single data unit UUID to filter tasks by data hash.
* `dataset_hash` (Union\[List\[UUID], UUID, List\[str], str, None]): A list of dataset UUIDs or a single dataset UUID to filter tasks by dataset hash.
* `data_title` (Optional\[str]): A string to filter tasks by data title.
* `status` (Union\[ConsensusReviewTaskStatus, List\[ConsensusReviewTaskStatus], None]): A list of task statuses or a single task status to filter tasks by their status.

**Returns**

An iterable of `ConsensusReviewTask` instances with the following information:

* `uuid`: Unique identifier for the task.
* `created_at`: Time and date the task was created.
* `updated_at`: Time and date the task was last edited.
* `assignee`: The user currently assigned to the task. The value is None if no one is assigned to the task.
* `data_hash`: Unique identifier for the data unit.
* `data_title`: Name/title of the data unit.
* `options`: List of ConsensusReviewOptions. ConsensusReviewOptions are the labels available for each subtask, including information such as annotator, label\_branch\_name, and label\_hash.

## ConsensusReviewTask Objects

```python theme={"dark"}
class ConsensusReviewTask(WorkflowTask)
```

Represents tasks in the Review stage of a Consensus Project.

**Attributes**

* `status` (ConsensusReviewTaskStatus): The status of the review task.
* `data_hash` (UUID): Unique ID for the data unit.
* `data_title` (str): Name of the data unit.
* `assignee` (Optional\[str]): The user assigned to the task.
* `options` (List\[ConsensusReviewOption]): Specify the labels for the task.

**Allowed actions**

* `approve`: Approves a task.
* `reject`: Rejects a task.
* `assign`: Assigns a task to a user.
* `release`: Releases a task from the current user.
* `move`: Moves the review task to another stage in the workflow.

#### approve

```python theme={"dark"}
def approve(*,
            assignee: Optional[str] = None,
            retain_assignee: bool = False,
            bundle: Optional[Bundle] = None) -> None
```

Approve the current task.

**Parameters**

* `assignee` (Optional\[str]): User email to be assigned to the review task whilst approving the task.
* `retain_assignee` (bool): Retains the current assignee whilst approving the task. This is ignored if `assignee` is provided. An error will occur if the task does not already have an assignee and `retain_assignee` is True.
* `bundle` (Optional\[Bundle]): Optional bundle of actions to execute with the approval.

**Returns**

None

#### reject

```python theme={"dark"}
def reject(*,
           assignee: Optional[str] = None,
           retain_assignee: bool = False,
           bundle: Optional[Bundle] = None) -> None
```

Reject the current task.

**Parameters**

* `assignee` (Optional\[str]): User email to be assigned to the review task whilst rejecting the task.
* `retain_assignee` (bool): Retains the current assignee whilst rejecting the task. This is ignored if `assignee` is provided. An error will occur if the task does not already have an assignee and `retain_assignee` is True.
* `bundle` (Optional\[Bundle]): Optional bundle of actions to execute with the rejection.

**Returns**

None

#### assign

```python theme={"dark"}
def assign(assignee: str, *, bundle: Optional[Bundle] = None) -> None
```

Assign the current task to a user.

**Parameters**

* `assignee` (str): The user to assign the task to.
* `bundle` (Optional\[Bundle]): Optional bundle of actions to execute with the assignment.

**Returns**

None

#### release

```python theme={"dark"}
def release(*, bundle: Optional[Bundle] = None) -> None
```

Release the current task from the current user.

**Parameters**

* `bundle` (Optional\[Bundle]): Optional bundle of actions to execute with the release.

**Returns**

None

#### move

```python theme={"dark"}
def move(*,
         destination_stage_uuid: UUID,
         bundle: Optional[Bundle] = None) -> None
```

Moves the review task from its current stage to another stage.

**Parameters**

* `destination_stage_uuid` (UUID): Unique identifier of the stage to move the task to.
* `bundle` (Optional\[Bundle]): Optional bundle of actions to execute with the move.

**Returns**

None

#### issues

```python theme={"dark"}
@property
def issues() -> TaskIssues
```

Returns the issue client for the task.
