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

# Approve or reject orders

> Find the orders waiting for your decision, approve or reject a stage, and read the decision history.

When the [approval policy](/docs/en/orders/approval-policy) says a submitted order needs a decision, the order gets an **approval plan** and waits in **Waiting for approval** (`pending_approval`) until the right people decide. This page covers the **Order approvals** screens: the inbox (`console.muveya.com/approvals`) and the decision screen (`/approvals/<orderId>`).

## Who can decide

| What you want to do | Permission you need (label in **Team**) |
| - | - |
| See **Order approvals** in the main navigation | `approvals.decide` (**Decide approvals**) or `approvals.policy.manage` (**Manage approval rules**) |
| See the inbox, decide, and read the decision history | `approvals.decide` |
| See order values in the inbox and on the decision screen | `orders.value.read` (**View order values**) |
| Open **Approval policy** from the inbox | `approvals.policy.manage` |

These permissions never come with a role: an **Owner** or an **Administrator** also needs them granted. See [Roles and permissions](/docs/en/account/roles-and-permissions).

Four rules decide which orders you can act on, all enforced by the server:

1. **The decision permission.** Without `approvals.decide` there is no inbox and no decision.
2. **Location access.** You only see and decide orders whose location is assigned to you. An order of another location answers as if it did not exist.
3. **Stage permissions.** Each stage of a plan names the permission its approvers must hold. Rules published from the console always require `approvals.decide`, so in practice every decider qualifies. You must hold the permissions of every step of the stage you decide.
4. **Separation of duties.** The person who requested an order can never decide it (see the section **Separation of duties**).

## How an order reaches the inbox

<Steps>
  <Step title="The requester submits the order">
    The order moves to **Submitted**. See [Create and track orders](/docs/en/orders/create-and-track).
  </Step>

  <Step title="The system applies the policy">
    Within seconds, the current policy version is evaluated against the order: its type, its value and its supplies. The result is the approval plan: a list of stages, each with the number of people who must approve it, plus the policy version used.
  </Step>

  <Step title="The order waits or moves on">
    If the plan has at least one stage, the order moves to **Waiting for approval** and appears in the inbox of every eligible decider. If the plan has no stage, the order is approved automatically (see the section **Automatic approval**).
  </Step>
</Steps>

## The inbox

Open **Order approvals** in the main navigation. The screen is titled **Order approvals**: "Orders of your clinics waiting for your decision. You never see your own."

| Column | What it shows |
| - | - |
| **Order** | The order number. It opens the decision screen. |
| **Type** | **General** or **Clinical**. |
| **Clinic** | The location of the order. |
| **Requested by** | The requester by name. |
| **Submitted** | When the order was submitted. |
| **Approvals needed** | Each stage with the number of approvals it needs, for example "Clinic manager (1), Finance (1)". |
| **Value** | Only if you have `orders.value.read` and at least one listed order has a value. Orders without a value show an empty mark. |

The inbox lists only orders in **Waiting for approval**, oldest first, and reads up to 200 pending orders at a time. It excludes:

* orders of locations not assigned to you;
* orders whose stages require a permission you do not hold;
* orders you requested yourself.

| What you see | Why |
| - | - |
| **No orders are waiting for your decision.** | Nothing is pending for you. |
| **You do not decide order approvals. If you should, ask your clinic's administrator for the permission.** | You lack `approvals.decide` (you may still manage the policy). |
| An **Approval policy** link in the header | You have `approvals.policy.manage`. |

On **Home**, the **Pending work** section shows **Orders waiting for your approval**, with a count, when your inbox is not empty.

## Decide an order

<Steps>
  <Step title="Open the order">
    Select the order number in the inbox, or **Review and decide** on the order detail. The screen is titled **Decide order #** with the number, with **Back to approvals**.
  </Step>

  <Step title="Review what is asked for">
    The facts show **Status**, **Type**, **Clinic**, **Deliver to**, **Requested by**, **Reason** (if any) and **Order value** (with `orders.value.read`). The **Supplies** table lists each **Supply** (name and SKU) and its **Quantity** with the unit. The patient reference is never shown here.
  </Step>

  <Step title="Choose the stage">
    In **Stage you decide**, pick the stage. Each option shows the stage name and, in parentheses, the approvals it needs. The first stage of the plan is selected by default.
  </Step>

  <Step title="Optionally add a comment">
    **Comment (optional)** accepts up to 500 characters. Longer text shows **The comment can have up to 500 characters.** and blocks both buttons.
  </Step>

  <Step title="Approve or reject">
    Select **Approve** or **Reject**. While the decision is recorded the button reads **Recording…**. Then the screen confirms "You approved the (stage) stage. The order moves on by itself." or "You rejected the (stage) stage. The requester can create a new order."
  </Step>
</Steps>

### What each decision does

| Decision | Result |
| - | - |
| **Approve**, and some stage still needs approvals | Your approval is recorded. The order stays in **Waiting for approval** for the remaining approvers. |
| **Approve**, and this completes every stage | The order moves to **Approved**. The system then reserves stock and the delivery flow starts. See [Deliveries overview](/docs/en/deliveries/overview). |
| **Reject** | The whole order moves to **Rejected** at once, whatever the other stages say. It is final: the requester must create a new order if the supplies are still needed. |

**What the system records:** one decision entry with the stage, the outcome, you as the decider, the server time, your comment, the policy version of the plan and the order version you decided on. The audit log also receives an `approvals.decision` entry. Decisions are never edited or deleted.

### Rules and limits

* The comment is optional, up to 500 characters; spaces at the start and end are removed.
* The stage must be part of the order's plan.
* Each person decides a given stage of an order once. A stage that needs two approvals needs two different people.
* The same person may decide different stages of the same order, if they are eligible for each.
* A decision cannot be changed. If you approved a stage, you cannot later reject that same stage; the attempt is refused.
* Repeating exactly the same decision (for example, after reloading the page) does not create a second entry.
* You can only decide while the order is in **Waiting for approval**.

<Note>
  Deciding is marked as a sensitive action. In the current release the authenticator is optional and does not block decisions. If identity verification is ever requested, the screen shows **Verify your identity to continue.** with a **Verify your identity** button, and your comment stays in place so you can retry. See [Account security](/docs/en/account/security).
</Note>

## Separation of duties

The requester of an order can never approve or reject it, even with `approvals.decide`:

* The inbox never lists your own orders.
* If you open your own order on the decision screen, you see **You requested this order, so another person has to decide it.** and no decision form. The order detail tells you: **You requested this order, so another person has to approve it.**
* If a decision on your own order reaches the server anyway, it is refused with **You requested this order, so you cannot decide it.** (`approvals.self_approval_forbidden`) and the attempt is recorded in the audit log as `approvals.decision.denied`.

Make sure each location has at least one eligible decider other than its usual requesters, or their orders will wait.

## Multi-stage and multi-approver plans

A plan can have several stages, and each stage can need more than one person:

* **Every stage must be approved** before the order moves to **Approved**. There is no fixed order between stages; approvers can decide them in any order.
* **A stage that needs N approvals** needs N different people. Until then, the order stays in **Waiting for approval** and keeps showing up in the inbox of the eligible people who have not decided that stage.
* **One rejection is enough** to reject the whole order.

For example, a plan "Clinic manager (2), Finance (1)" needs two different people to approve **Clinic manager** and one person to approve **Finance**. The order is approved when the third required approval arrives, whichever stage it completes.

The order detail lists the same stages under **Next step**, so the requester can see what the order is waiting for.

## When the order changed before you decided

The decision is made against the version of the order your screen loaded. If something changed in between, nothing is recorded and the screen reloads the order:

| Situation | What you see |
| - | - |
| The requester cancelled the order, or another approver's decision already approved or rejected it | The decision form disappears and the screen shows **This order is no longer waiting for a decision.** with **Open the order**. |
| The order version changed since you loaded it | **Someone decided or changed this order a moment ago. The screen now shows the latest version; review it before deciding.** |
| You already recorded a different decision on this stage | The same message. Your earlier decision stands. |
| The stage you chose is no longer in the plan | **That stage is not part of this order's approval plan.** |

Review the refreshed screen before deciding again.

## Automatic approval

If the policy in force requires no stage for an order (no rule matches it, or the policy has no rules at all), the system approves the order by itself: it goes from **Submitted** straight to **Approved** and on to preparation.

* No person decides, so no decision entry is created and the decision history reads **No decisions yet.**
* The order keeps its plan with the policy version that approved it, and the audit log records `approvals.auto_approved` as a system action.
* If the dental clinic has no published policy at all, nothing is approved automatically: submitted orders wait in **Submitted**. After a policy is published, they move on the next time any order is submitted in the dental clinic. See [Approval policy](/docs/en/orders/approval-policy).

## Decision history

At the bottom of the decision screen, the **Decisions** section lists every decision on the order, oldest first. It is visible to members with `approvals.decide` for orders of their locations, whatever the order's current status.

Each entry shows:

* the outcome (**Approved** or **Rejected**), the stage and the person who decided (**You** for your own decisions);
* the date and time;
* the comment, if there was one.

If nobody has decided yet, the section reads **No decisions yet.** The history is append-only: entries are never changed or removed.

## Notifications

muveya does not send emails, WhatsApp messages or push notifications about approvals today. Approvers find pending work in two places: the **Orders waiting for your approval** card on **Home**, and the **Order approvals** inbox. Requesters follow their order's status in **Orders**.

## What can go wrong

| Message | Code | Why | What to do |
| - | - | - | - |
| **You requested this order, so you cannot decide it.** | `approvals.self_approval_forbidden` | Separation of duties. | Another eligible person must decide. |
| **This order is no longer waiting for a decision. The screen now shows where it is.** | `approvals.order_not_pending` | The order was cancelled or already decided. | Open the order to see its status. |
| **That stage is not part of this order's approval plan.** | `approvals.stage_not_in_plan` | The stage does not exist in this order's plan. | Choose a stage from the list. |
| **Someone decided or changed this order a moment ago. The screen now shows the latest version; review it before deciding.** | `approvals.decision_conflict`, `orders.version_conflict` | You already decided this stage differently, or the order changed. | Review the refreshed order. |
| **This order does not exist or you cannot see it.** | `orders.not_found` | Wrong link, or the order's location is not assigned to you. | Check the link and your location access. |
| **Your account does not have permission for this action.** | `common.forbidden` | You lack `approvals.decide`, or a permission required by the stage. | Ask a member manager for the permission. |
| **Verify your identity to continue.** | `auth.mfa_required` | Identity verification was requested for this sensitive action. | Select **Verify your identity**, enter your authenticator code, then decide again. |
| **The comment can have up to 500 characters.** | | The comment is too long. | Shorten it. |

## Approvals outside the console

Decisions can only be made in the console. The MCP tools `approvals.list_pending` and `management.pending_decisions` are meant to read the same inbox, but they need `approvals.decide`, which the current read-only OAuth scope set does not grant, so they always answer `common.forbidden`. See [MCP tools](/docs/en/mcp/tools). The public API does not expose approval decisions.

## Related pages

<CardGroup cols={2}>
  <Card title="Approval policy" icon="scale-balanced" href="/docs/en/orders/approval-policy">
    The rules that build each order's approval plan.
  </Card>

  <Card title="Create and track orders" icon="cart-shopping" href="/docs/en/orders/create-and-track">
    Statuses, order detail and cancellation.
  </Card>

  <Card title="Deliveries overview" icon="truck" href="/docs/en/deliveries/overview">
    What happens once an order is approved.
  </Card>

  <Card title="Roles and permissions" icon="user-shield" href="/docs/en/account/roles-and-permissions">
    Grant `approvals.decide` and location access.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.