---
id: SCR-COM-FUL-003
title: Order 360 Shipments card
route: '/console/{tenantId}/orders/{orderId}'
surface: console
product_area: commerce
module: fulfillment
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
purpose: >-
  Show an order’s warehouse shipment progress and provide the existing
  carrier-label actions.
supports:
  - JNY-COM-FUL-003
  - CAP-COM-FUL-012
  - CAP-COM-FUL-013
permission: orders.shipments.view (commerce.shipments.read)
entry_from:
  - Order 360 (the Orders-owned order view).
exits_to:
  - The carrier's tracking page (external link).
displays:
  - field: 'Carrier and service, shipment identifier and a state badge.'
    source: listShipments (by order)
  - field: Shipped time and tracking number including a link.
    source: listShipments; listShipmentPackages
  - field: 'Parcels including contents, identifier and weight.'
    source: listShipmentPackages
  - field: 'The shipment''s exception, once any.'
    source: listShipments
actions:
  - label: Print Label
    operation_id: purchasePackageLabel
    permission: orders.shipments.printLabel (commerce.shipments.update)
    confirm: false
  - label: Void Label
    operation_id: voidPackageLabel
    permission: orders.shipments.voidLabel (commerce.shipments.update)
    confirm: true
states:
  - empty
  - loading
  - error
  - read-only
validation:
  - BR-CAP-COM-FUL-012-12
  - BR-CAP-COM-FUL-013-05
  - BR-CAP-COM-FUL-013-09
  - BR-CAP-COM-FUL-013-11
patterns:
  - Record-view card on Order 360 (defineCard)
  - Document frames per shipment with facts and tone badges
  - Confirmation dialog for the void
  - Toasts for results and refusals
component: components/record-views/cards/order/order-shipments.tsx
evidence:
  - >-
    react-console at baf6dae3:
    components/record-views/cards/order/order-shipments.tsx;
    lib/commerce/order-flows/live.ts (printLabel, voidLabel, CARD_VOID_REASON);
    lib/authz/backend-aliases.ts.
  - >-
    react-console at baf6dae382d6f41dce976c7f848667ccc37e076f:
    lib/api/commerce.ts:COMMERCE_LIVE; lib/config/mock-mode.ts:resolveMockMode;
    app/(console)/console/[tenantId]/orders/[orderId]/page.tsx.
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-CRY-001, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-VEN-001, TC-VEN-002, TC-VEN-003, TC-PRV-001, TC-PRV-002]
---

# Order 360 Shipments Card

## What the Screen Is For

Show an order’s warehouse shipment progress and provide the existing carrier-label actions.

## What It Shows and Lets People Do

Shipment frames display carrier, service, state, parcels, weight and tracking links. Print Label invokes purchase for the adapter’s selected parcel; Void Label confirms the act and uses the adapter’s retained reason. These controls do not provide picking or packing.

## States and Errors

Live mode uses the Commerce service by default. Explicit mock or preview mode uses sample adapters where deployment settings permit it; customer production deployments refuse mock mode.

Reads can be empty or fail, and action refusals appear in toasts. Individual label permissions gate the buttons. A manual carrier still needs tracking and cost values that this print action does not collect.

## Patterns It Must Respect

Keep the registered record-view card, document frames, badges, confirmation dialog and result toasts. A success toast does not prove a physical printer received a label.
