> ## 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.

# Pick and dispatch an order

> Scan the boxes reserved for an order in FEFO order, split boxes that hold more than the order needs, and dispatch them.

Picking confirms, box by box, that the boxes muveya reserved for an order are physically in your hands. Dispatching then sends every picked box out of the source warehouse at once. Both happen on the pick screen.

## Who can do it

| Action | Permission | Also needed |
| - | - | - |
| Open the pick screen, see the pick list, scan boxes | `fulfillment.pick` (**Prepare orders**) | The order's location in your **Location access**, and the box's warehouse in your **Warehouse access**. |
| Dispatch the picked boxes | `fulfillment.dispatch` (**Dispatch orders**) | `fulfillment.pick`, because the **Dispatch** panel lives on the pick screen. The source location in your **Location access** (the order's location when the source is a central warehouse or the order named no source), and every box's warehouse in your **Warehouse access**. |

Picking and dispatching are origin-side steps. See [Origin party and destination party](/docs/en/deliveries/overview#origin-party-and-destination-party). Without `fulfillment.pick` the screen only says "You cannot prepare orders. Ask your clinic's administrator for permission to pick."

## Where

* In **Deliveries**, open **To prepare** and select the order number. The section lists orders in **Stock reserved** (`allocated`) and **Being prepared** (`picking`).
* From the custody detail of the order, **Prepare the order**.
* Direct path: `console.muveya.com/fulfillment/:orderId/pick`.

The screen is titled **Prepare order #1042**, with the destination under the title, for example "Deliver to Bodega Norte · Clínica Norte". **Back to deliveries** returns to the queue. It has three parts: **Scan a box**, **Boxes to take** and, for dispatchers, **Dispatch**.

## The pick list

**Boxes to take** lists every box reserved for the order:

| Column | What it shows |
| - | - |
| **Supply** | The supply name and SKU, for example "Nitrile gloves M · GLV-NIT-M". |
| **Box code** | The printed label code to look for, for example `BX-000123`. |
| **Take from** | The warehouse the box is in right now. |
| **Lot** | The lot number, when the box has one. |
| **Expires** | The expiry date, when the box has one. |
| **Quantity** | The quantity reserved from this box for the order. |
| **State** | **To pick** or **Picked**. A box that holds more than the order adds "Holds more than the order: scanning it separates 20 into a new container". |

Rules of the list:

* The order is **FEFO**: the earliest expiry date first, boxes without an expiry date last. Pick in that order.
* Only usable boxes appear. A reserved box that is no longer **Active** or has passed its expiry date (for example, it was quarantined by a [lot recall](/docs/en/inventory/lot-recall)) drops off the list.
* **Take from** shows the box's live location. If a reserved box was moved to another warehouse after the reservation, it is still valid: pick it where it is now.
* If nothing is reserved, or the order is outside your locations, the list says "No boxes are reserved for this order right now."
* The list is read-only. You cannot select a box from it: every box must be scanned or typed.

<Warning>
  If a box disappears from the list before you pick it, the order can end up dispatched without it: the **Dispatch** panel only waits for the boxes still listed. Compare the list with the order lines on the order page before dispatching, and write to [team@muveya.com](mailto:team@muveya.com) if a line is short.
</Warning>

## Scan the boxes

<Steps>
  <Step title="Find the box">
    Go to the warehouse in **Take from** and find the box with the printed **Box code**.
  </Step>

  <Step title="Scan or type the code">
    The **Box code** field has the focus when the screen opens. A keyboard-mode barcode scanner types the code and presses Enter for you. Without a scanner, type the code and press Enter, or select **Record box**.
  </Step>

  <Step title="Read the answer">
    "Box BX-000123 recorded." means the box is picked and its row changes to **Picked**. The field clears and keeps the focus for the next scan.
  </Step>

  <Step title="Repeat for every box">
    The order moves to **Being prepared** with the first recorded box.
  </Step>
</Steps>

### What muveya checks on each scan

The reservation is the check. muveya accepts the code only if it belongs to a box that is reserved for this order and is still **Active**. Because the box itself carries the supply, lot, expiry and quantity, there is nothing else to type: a box of the right supply that was not reserved for this order is refused, even if its SKU and lot match.

| Situation | Answer on screen |
| - | - |
| The code is reserved for this order | "Box BX-000123 recorded." |
| The code is unknown, not reserved for this order, not **Active**, or in a warehouse outside your **Warehouse access** | "That code is not reserved for this order. Check the label and scan again." The order does not advance. |
| The box was already recorded for this order | "That box is already recorded as picked for this order." This is a notice, not an error. |
| The same scan was sent again after a lost connection | "Box BX-000123 was already recorded." |
| The order is no longer being prepared | "There is nothing left to pick for this order." |

A scan that got no answer (for example, the connection dropped) can be repeated safely: while you retry the same code, the console reuses the same request key, so the box is never picked twice.

## Separating a box at pick time

Boxes travel whole. When a reserved box holds more than the order takes, scanning it separates exactly the reserved quantity into a new container, and that container is what gets picked and dispatched.

<Steps>
  <Step title="Spot the box">
    Its **State** says "Holds more than the order: scanning it separates 20 into a new container". While such a box is still to pick, the form shows **Label for a separated container (optional)**.
  </Step>

  <Step title="Prepare the new container">
    Put the order's quantity in a new bag or box. If you have a label for it, write its code in **Label for a separated container (optional)**, up to 64 characters. Leave it empty and muveya names it after the original box, for example `BX-000123-F1`.
  </Step>

  <Step title="Scan the original box">
    Scan the code of the original box. The answer is "The order's quantity is now in the new container BX-000123-F1. Stick that label on it."
  </Step>

  <Step title="Label the new container">
    Stick the label on the new container. The pick list now shows it as **Picked** under its new code.
  </Step>
</Steps>

What the system records for a separation:

* **Separated out** on the original box and **Separated in** on the new container, for the same quantity, so the supply's total stock does not change.
* The order's reservation moves from the original box to the new container (**Released** and **Reserved** movements).
* **Picked** on the new container.
* The new container keeps the original box's supply, lot, expiry date and reception date. The original box stays **Active** in its warehouse with the rest of its content.

Limits:

* A label already used by another box in the dental clinic account is refused: "The record changed or already exists. Review it before trying again." Choose another label, or leave the field empty.
* Boxes that carry serial numbers cannot be separated. The scan is refused with the same conflict message.
* If the scan is interrupted after the separation, scan the original box again, or the new container's label: muveya recognizes the separation it already made and does not split twice.

## Dispatch the order

The **Dispatch** panel appears for members with `fulfillment.dispatch` while the order is being prepared. Until every listed box is picked it says "Dispatch becomes available once every box is picked."

<Steps>
  <Step title="Check that everything is picked">
    When every row says **Picked**, the panel says "Every box is picked. Hand them to whoever takes them to the destination."
  </Step>

  <Step title="Add the carrier (optional)">
    Type the carrier, courier or tracking reference in **Carrier or courier (optional)**, up to 120 characters.
  </Step>

  <Step title="Dispatch">
    Select **Dispatch order**. The answer is "Order dispatched. The boxes are on their way." If you can also confirm deliveries, a **Confirm the delivery** link appears.
  </Step>
</Steps>

Before moving any stock, muveya checks every picked box: it must still be **Active**, and the quantity it holds and the quantity reserved in it must both equal what this order takes. A box with extra stock or with another order's reservation is refused as a whole, and nothing is dispatched.

What the system records:

* A **Dispatched** movement on each picked box: its quantity leaves the source warehouse's stock and its reservation is consumed.
* Each box changes to **In transit**. It stays in transit until the destination accepts it or it is returned.
* The dispatch time and the carrier reference on the custody record. The console does not show the carrier reference; the API returns it as `carrierRef` in `GET /v1/fulfillments`.
* The order moves to **Dispatched** (`dispatched`) and the `fulfillment.dispatched` audit record is written.

Dispatching an order that was already dispatched changes nothing and says "This order was already dispatched."

## When no stock is reserved

The pick screen only works once muveya has reserved stock for the order. If the order is approved but not reserved:

* It does not appear under **To prepare**, and its order page keeps saying "The order is moving to its next step. This screen refreshes by itself in a few seconds."
* Opening the pick screen shows "No boxes are reserved for this order right now."

The reservation is all or nothing and runs again each time another order of the dental clinic account is approved; there is no retry button. Receive or move the missing stock, then, if the order stays in **Approved**, write to [team@muveya.com](mailto:team@muveya.com) with the order number. See [Step 1: automatic stock reservation](/docs/en/deliveries/overview#step-1-automatic-stock-reservation).

## What can go wrong

| Message | Code | What to do |
| - | - | - |
| "That code is not reserved for this order. Check the label and scan again." | `fulfillment.scan_mismatch` | Compare the label with **Box code** in the list. Check that the box's warehouse is in your **Warehouse access**. |
| "That box is already recorded as picked for this order." | `fulfillment.over_pick` | Nothing: the box is already picked. Continue with the next one. |
| "There is nothing left to pick for this order." | `fulfillment.nothing_to_pick` | The order is no longer in **Stock reserved** or **Being prepared**, or it is outside your locations. Open the custody detail to see its status. |
| "There are no picked boxes to dispatch yet." | `fulfillment.nothing_to_dispatch` | Pick at least one box first, or the order is not in **Being prepared**, or its source location is outside your **Location access**. |
| "A picked box holds more than this order takes. Boxes travel whole: scan it again to separate the order's quantity into its own container." | `fulfillment.box_not_dispatchable` | Dispatch is refused while a picked box is no longer **Active**, has expired, or no longer holds exactly what this order reserved on it (for example, units were used or corrected after the reservation, or another order shares the box). Scanning a picked box again does not fix it: it only answers "That box is already recorded as picked for this order." Open the box page to see what changed, then write to [team@muveya.com](mailto:team@muveya.com) with the order number. |
| "This order is not being prepared anymore." | | The order moved past picking. Use the link to its tracking page. |
| "This record is not available in the active dental clinic account." | `orders.not_found` | The order does not exist or belongs to a location outside your **Location access**. |
| "The record changed or already exists. Review it before trying again." | `inventory.box_code_taken` and other stock conflicts | Use another label for the new container, or reload the page and check the box on its [box page](/docs/en/inventory/boxes). |
| "This record is not available in the active dental clinic account." | `inventory.box_not_found` | A box is in a warehouse outside your **Warehouse access**. Ask an administrator to extend it, or ask a colleague with access. |
| "Your account does not have permission for this action." | `common.forbidden` | You lack `fulfillment.pick` or `fulfillment.dispatch`. |
| "Could not confirm the operation. Check your connection and review the list before trying again." | | Reconnect and scan the same code again; it will not be picked twice. |

## Related pages

<CardGroup cols={2}>
  <Card title="Deliveries overview" icon="truck" href="/docs/en/deliveries/overview">
    The custody lifecycle, permissions and whole-box custody.
  </Card>

  <Card title="Delivery and receipt" icon="clipboard-check" href="/docs/en/deliveries/delivery-and-receipt">
    The next steps after dispatch.
  </Card>

  <Card title="Boxes" icon="box" href="/docs/en/inventory/boxes">
    Box codes, states and movements.
  </Card>

  <Card title="Lot recall" icon="triangle-exclamation" href="/docs/en/inventory/lot-recall">
    Quarantined lots and why a reserved box can drop off the list.
  </Card>
</CardGroup>


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