Skip to main content

Managing Transfer Orders

How to edit, confirm, cancel, and complete transfer orders after creation.


Editing a Transfer

All fields are editable while the transfer is in draft status.

Once confirmed, only reference and notes can be edited. If the transfer has already been synced to Shopify (i.e. it has a Shopify ID), changes to reference or notes are automatically pushed to Shopify as a TRANSFER_EDIT mutation.

Completed and cancelled transfers are fully read-only.


Status Progression

Draft → Confirmed (Confirm)

Confirmation has four backend guards that must all pass:

GuardWhat happens if it fails
Status must be draftError thrown
Both source and destination locations must be setError thrown; shopifySyncError written to the transfer record
At least one non-cancelled line item must existError thrown; shopifySyncError written
syncTransferOrderToShopify must be true (for Shopify sync)Sync skipped, SKIPPED log created — transfer still confirmed

When confirmed successfully:

  • Transfer status changes to confirmed
  • All active line items status changes to confirmed
  • If Shopify sync is enabled: a TRANSFER_CREATE sync log is created and the syncTransferToShopify background action is enqueued to create the transfer in Shopify's Inventory Transfer API
  • If Shopify sync is disabled: no Shopify action is taken

Note: unlike purchase orders, confirming a transfer does not trigger supply plan regeneration.

Confirmed → In Transit (automatic)

The transfer status changes from confirmed to in_transit automatically when the first shipment is created. This is a backend operation — no manual action is required. All confirmed line items are also transitioned to in_transit at the same time.

Mark Complete

Available when the transfer is confirmed or in_transit and at least one active shipment exists.

What happens on completion:

  1. Each line item's quantityOrdered is reconciled to actual received: set to quantityAccepted + quantityDefect across all active shipment items for that line item
  2. All line items have quantityPending set to 0
  3. All line items are set to status completed
  4. Transfer status is set to completed
  5. Completed transfers are fully read-only

Important: unlike purchase orders, completing a transfer does not trigger supply plan regeneration. Supply plan metrics for affected inventory levels will update on their next scheduled regeneration cycle.


Cancelling a Transfer

Backend rules:

ConditionResult
Status is in_transit, completed, or cancelledBlocked — error thrown
Status is confirmed + has a shopifyId + sync enabled + any shipment is announced or receivedBlocked — error thrown
Status is draftAlways allowed
Status is confirmed without Shopify sync, or confirmed with sync but no shipments yetAllowed

What happens on cancellation:

  1. Transfer status is set to cancelled
  2. All line items are set to status cancelled
  3. If the transfer has a shopifyId and syncTransferOrderToShopify is true: a TRANSFER_CANCEL mutation is enqueued to cancel the transfer in Shopify's Inventory Transfer API

Quantity Tracking

The Transfer Orders detail page shows these aggregate quantities across all shipments:

FieldMeaning
OrderedquantityOrderedComputed — total across all line items
AnnouncedquantityAnnouncedComputed — total announced in shipments
DeliveredquantityDeliveredComputed — total physically delivered
AcceptedquantityAcceptedComputed — total accepted (passed inspection)
DefectquantityDefectComputed — total failed inspection
Fill ratefillRateComputed — accepted ÷ ordered as a percentage
Next arrivalnextArrivalComputed — earliest ETA across open shipments
Delayed delivery daysdelayedDeliveryDaysComputed — days past confirmed delivery date