---
title: "Add parallel approvals in a state"
canonical: "https://support.appfire.com/space/CDML/649859269/Add%20parallel%20approvals%20in%20a%20state"
format: markdown
---
> Macro (aura-html)


## Overview

> Macro (excerpt)
> 
> Add multiple reviews to a content review, set assignee requirements and review dependencies

You can add multiple reviews in a single content review state, assign different reviewers, set the minimum number of reviewers for each review, and also add dependencies between reviews.

![image](media://c8d9f19a-e900-464e-89c6-55f2205a419c)

## Parallel reviews

To add multiple reviews, put more than one [approval macro](https://appfire.atlassian.net/wiki/spaces/CDML/pages/649662337) into a [state macro](https://appfire.atlassian.net/wiki/spaces/CDML/pages/649531575) body.

For example, to create three reviews **Grammar**, **Design,** and **Technical,** the following markup is used:

```plaintext
{workflow:name=Parallel review}
   {state:Editing|submit=Sign-off Review}
   {state}
   {state:Sign-off Review|approved=Published|rejected=Editing}
      {approval:Technical}
      {approval:Grammar}
      {approval:Design}
   {state}
   {state:Published}
   {state}
{workflow}
```

This can also be done in the workflow builder.


![cdmdc_wf_builder_sign-offreview_3_approvals_parallelreviews.png](media://74a740f5-a8a7-4be8-ac21-6a80bcb33ef9)

The initial order of the reviews in the [workflow popup](https://appfire.atlassian.net/wiki/spaces/CDML/pages/649659846) on the page is the order in which the approval macros have been defined in the state. 

![image](media://b787ee67-a50b-4e37-a9be-61db06505285)


Each of these reviews can be done in parallel; currently, with no pre-assignment of reviewers and no minimum number of approvals set, only one reviewer is required to complete each one.

As soon as all the reviews agree to **Approve** or **Reject**, the transition to the relevant workflow state will occur.

## Reviewer settings

Each of the `approval` macros can use all the same features you'd expect from a basic content review. So, let's add some additional requirements on who can review and how many reviewers are required:

```plaintext
{workflow:name=Parallel review}
   {state:Editing|submit=Sign-off Review}
   {state}
   {state:Sign-off Review|approved=Published|rejected=Editing}
      {approval:Technical|user=&adam,matilde,suni}
      {approval:Grammar|group=project-quality-leads|minimum=2}
      {approval:Design|assignable=true}
   {state}
   {state:Published}
   {state}
{workflow}
```

## Grammar review - reviewer settings

We've used the `group` parameter to limit the **Grammar** review to members of the `project-quality-leads` Confluence user group.

We've used the `minimum` parameter (**Minimum approvals** in workflowbuilder) to indicate that at least 2 people from this group are required to complete the review.

![image](media://47475974-6202-46cc-a136-d39c9ba5eb2f)

The **Approve** and **Reject** buttons are disabled for users who are not members of the `project-quality-leads` Confluence user group.

What happens if the transition has not yet taken place and a user who is a member of the `project-quality-leads` Confluence user group chooses to **Reject** the content?

![image](media://e2cb1cbc-8369-49f8-869a-b3433ffba836)

Any previous reviewer **Approve** decisions are removed, and the popup only displays the **Reject** decision.

![image](media://ea07a26c-d72f-489f-ba17-0745abe5102b)

The **Design** review has been reset except for the new **reject** decision. The **Reject** decision can be by any user who is a member of **project-quality-leads** including those who have not yet undertaken the review.

The **Approve** and **Reject** decisions are recorded in the page activity report.

## Technical review - reviewer settings

For the **Technical** review, we've used the `user` parameter to name three individuals who are allowed to perform that review.

The addition of the `&`** **operator before the first user in the list means that all the listed users are required to undertake the review. This adds the user avatars to the workflow popup.

![image](media://6f6e7dc0-1223-45a8-bb9c-cd6f9c1a418b)

If the `&`** **operator is not present and there are no other settings, only one of them would need to complete the review, but any of them could still review the content if they wanted to. Note that as the reviewers are not mandated to undertake the review (as the `&`** **operator is not present) the popup will not display the user avatars.

## Design review - reviewer settings

For the **Design** review, we've used the `assignable=true` parameter to allow any Confluence user (members of the `confluence-users` user group) to be added to the review.

![image](media://67318596-2a5d-4e89-ba76-30fca082f2d9)

As you can see, the **+ Add reviewer** link is added next to the **Approve/Reject** buttons.

## Review dependencies and sequencing the reviews

There is often an order in which reviews must be performed, either due to process or compliance reasons or simply to minimize reviewer workload. For example, you might want to delay the **Design** review until the **Technical** review is complete, as any technical errors in the content would likely need fixing prior to the **Design** review.


To achieve this, we can add the `hasapproval` [condition](https://appfire.atlassian.net/wiki/spaces/CDML/pages/649694110) to the **Design** approval, like so:

```plaintext
{workflow:name=Parallel review}
   {state:Editing|submit=Sign-off Review}
   {state}
   {state:Sign-off Review|approved=Published|rejected=Editing}
      {approval:Technical|user=&adam,matilde,suni}
      {approval:Grammar|group=project-quality-leads|minimum=2}
      {approval:Design|assignable=true|hasapproval=Technical}
   {state}
   {state:Published}
   {state}
{workflow}
```


Now, if someone selects the **Design** review prior to the **Technical** review being completed, they'll see the **Approve/Reject** buttons are disabled:

![image](media://be654ad4-a139-4749-9415-bf98682f1493)

However, the ability to add reviewers is still available so you don't have to wait for the **Technical** review to finish to specify who should participate in the **Design** review.

## Review display order

Reviews will be listed based on the order of the `approval` macros in your workflow markup, even if some reviews are dependent on other reviews (our **Design** review is dependent on the **Technical** review). Assigning a reviewer has no effect on the display order:

```
{state:Sign-off Review|approved=Published|rejected=Editing}
     {approval:Design|assignable=true|hasapproval=Technical}
	 {approval:Grammar|group=project-quality-leads|minimum=2}
	 {approval:Technical|user=&adam,matilde,suni}      
{state}
```

![image](media://fde2db15-4b26-4216-8953-2357fcee716e)

## See also

[Workflow Authoring Guide](https://appfire.atlassian.net/wiki/spaces/CDML/pages/648611901):

- [Approvals](https://appfire.atlassian.net/wiki/spaces/CDML/pages/650153766)
- [Roles and Permissions](https://appfire.atlassian.net/wiki/spaces/CDML/pages/650217543)

[User Guide](https://appfire.atlassian.net/wiki/spaces/CDML/pages/648907144):

- [Content reviews](https://appfire.atlassian.net/wiki/spaces/CDML/pages/650313809)
- [Conditions](https://appfire.atlassian.net/wiki/spaces/CDML/pages/649694110)