***

title: "OrderProcess"
generated: true
---------------

## OrderProcess

<GenerationInfo sourceFile="packages/core/src/config/order/order-process.ts" sourceLine="35" packageName="@vendure/core" />

An OrderProcess is used to define the way the order process works as in: what states an Order can be
in, and how it may transition from one state to another. Using the `onTransitionStart()` hook, an
OrderProcess can perform checks before allowing a state transition to occur, and the `onTransitionEnd()`
hook allows logic to be executed after a state change.

For detailed description of the interface members, see the [StateMachineConfig](/current/core/reference/typescript-api/state-machine/state-machine-config#statemachineconfig) docs.

:::info

This is configured via the `orderOptions.process` property of
your VendureConfig.

:::

```ts title="Signature"
interface OrderProcess<State extends keyof CustomOrderStates | string> extends InjectableStrategy {
    transitions?: Transitions<State, State | OrderState> & Partial<Transitions<OrderState | State>>;
    onTransitionStart?: OnTransitionStartFn<State | OrderState, OrderTransitionData>;
    onTransitionEnd?: OnTransitionEndFn<State | OrderState, OrderTransitionData>;
    onTransitionError?: OnTransitionErrorFn<State | OrderState>;
}
```

* Extends: [`InjectableStrategy`](/current/core/reference/typescript-api/common/injectable-strategy#injectablestrategy)

<div className="members-wrapper">

### transitions

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/state-machine/transitions#transitions'>Transitions</a><State, State | <a href='/current/core/reference/typescript-api/orders/order-process#orderstate'>OrderState</a>> &#38; Partial<<a href='/current/core/reference/typescript-api/state-machine/transitions#transitions'>Transitions</a><<a href='/current/core/reference/typescript-api/orders/order-process#orderstate'>OrderState</a> | State>>`}   />

### onTransitionStart

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/state-machine/state-machine-config#ontransitionstartfn'>OnTransitionStartFn</a><State | <a href='/current/core/reference/typescript-api/orders/order-process#orderstate'>OrderState</a>, <a href='/current/core/reference/typescript-api/orders/order-process#ordertransitiondata'>OrderTransitionData</a>>`}   />

### onTransitionEnd

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/state-machine/state-machine-config#ontransitionendfn'>OnTransitionEndFn</a><State | <a href='/current/core/reference/typescript-api/orders/order-process#orderstate'>OrderState</a>, <a href='/current/core/reference/typescript-api/orders/order-process#ordertransitiondata'>OrderTransitionData</a>>`}   />

### onTransitionError

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/state-machine/state-machine-config#ontransitionerrorfn'>OnTransitionErrorFn</a><State | <a href='/current/core/reference/typescript-api/orders/order-process#orderstate'>OrderState</a>>`}   />

</div>
## DefaultOrderProcessOptions

<GenerationInfo sourceFile="packages/core/src/config/order/default-order-process.ts" sourceLine="50" packageName="@vendure/core" since="2.0.0" />

Options which can be passed to the [configureDefaultOrderProcess](/current/core/reference/typescript-api/orders/order-process#configuredefaultorderprocess) function
to configure an instance of the default [OrderProcess](/current/core/reference/typescript-api/orders/order-process#orderprocess). By default, all
options are set to `true`.

```ts title="Signature"
interface DefaultOrderProcessOptions {
    checkModificationPayments?: boolean;
    checkAdditionalPaymentsAmount?: boolean;
    checkAllVariantsExist?: boolean;
    arrangingPaymentRequiresContents?: boolean;
    arrangingPaymentRequiresCustomer?: boolean;
    arrangingPaymentRequiresShipping?: boolean;
    arrangingPaymentRequiresStock?: boolean;
    checkPaymentsCoverTotal?: boolean;
    checkAllItemsBeforeCancel?: boolean;
    checkFulfillmentStates?: boolean;
}
```

<div className="members-wrapper">

### checkModificationPayments

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents an Order from transitioning out of the `Modifying` state if
the Order price has changed and there is no Payment or Refund associated
with the Modification.

### checkAdditionalPaymentsAmount

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents an Order from transitioning out of the `ArrangingAdditionalPayment` state if
the Order's Payments do not cover the full amount of `totalWithTax`.

### checkAllVariantsExist

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents the transition from `AddingItems` to any other state (apart from `Cancelled`) if
and of the ProductVariants no longer exists due to deletion.

### arrangingPaymentRequiresContents

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `ArrangingPayment` state if the active Order has no lines.

### arrangingPaymentRequiresCustomer

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `ArrangingPayment` state if the active Order has no customer
associated with it.

### arrangingPaymentRequiresShipping

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `ArrangingPayment` state if the active Order has no shipping
method set.

### arrangingPaymentRequiresStock

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `ArrangingPayment` state if there is insufficient saleable
stock to cover the contents of the Order.

### checkPaymentsCoverTotal

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `PaymentAuthorized` or `PaymentSettled` states if the order
`totalWithTax` amount is not covered by Payment(s) in the corresponding states.

### checkAllItemsBeforeCancel

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `Cancelled` state unless all OrderItems are already
cancelled.

### checkFulfillmentStates

\<MemberInfo kind="property" type={`boolean`} default={`true`}   />

Prevents transition to the `Shipped`, `PartiallyShipped`, `Delivered` & `PartiallyDelivered` states unless
there are corresponding Fulfillments in the correct states to allow this. E.g. `Shipped` only if all items in
the Order are part of a Fulfillment which itself is in the `Shipped` state.

</div>
## configureDefaultOrderProcess

<GenerationInfo sourceFile="packages/core/src/config/order/default-order-process.ts" sourceLine="163" packageName="@vendure/core" since="2.0.0" />

Used to configure a customized instance of the default [OrderProcess](/current/core/reference/typescript-api/orders/order-process#orderprocess) that ships with Vendure.
Using this function allows you to turn off certain checks and constraints that are enabled by default.

```ts
import { configureDefaultOrderProcess, VendureConfig } from '@vendure/core';

const myCustomOrderProcess = configureDefaultOrderProcess({
  // Disable the constraint that requires
  // Orders to have a shipping method assigned
  // before payment.
  arrangingPaymentRequiresShipping: false,
});

export const config: VendureConfig = {
  orderOptions: {
    process: [myCustomOrderProcess],
  },
};
```

The [DefaultOrderProcessOptions](/current/core/reference/typescript-api/orders/order-process#defaultorderprocessoptions) type defines all available options. If you require even
more customization, you can create your own implementation of the [OrderProcess](/current/core/reference/typescript-api/orders/order-process#orderprocess) interface.

```ts title="Signature"
function configureDefaultOrderProcess(options: DefaultOrderProcessOptions): void
```

Parameters

### options

\<MemberInfo kind="parameter" type={`<a href='/current/core/reference/typescript-api/orders/order-process#defaultorderprocessoptions'>DefaultOrderProcessOptions</a>`} />

## defaultOrderProcess

<GenerationInfo sourceFile="packages/core/src/config/order/default-order-process.ts" sourceLine="475" packageName="@vendure/core" since="2.0.0" />

This is the built-in [OrderProcess](/current/core/reference/typescript-api/orders/order-process#orderprocess) that ships with Vendure. A customized version of this process
can be created using the [configureDefaultOrderProcess](/current/core/reference/typescript-api/orders/order-process#configuredefaultorderprocess) function, which allows you to pass in an object
to enable/disable certain checks.

## OrderStates

<GenerationInfo sourceFile="packages/core/src/service/helpers/order-state-machine/order-state.ts" sourceLine="21" packageName="@vendure/core" since="2.0.0" />

An interface to extend the [OrderState](/current/core/reference/typescript-api/orders/order-process#orderstate) type.

```ts title="Signature"
interface OrderStates {

}
```

## OrderState

<GenerationInfo sourceFile="packages/core/src/service/helpers/order-state-machine/order-state.ts" sourceLine="42" packageName="@vendure/core" />

These are the default states of the Order process. They can be augmented and
modified by using the [OrderOptions](/current/core/reference/typescript-api/orders/order-options#orderoptions) `process` property, and by default
the [defaultOrderProcess](/current/core/reference/typescript-api/orders/order-process#defaultorderprocess) will add the states

* `ArrangingPayment`
* `PaymentAuthorized`
* `PaymentSettled`
* `PartiallyShipped`
* `Shipped`
* `PartiallyDelivered`
* `Delivered`
* `Modifying`
* `ArrangingAdditionalPayment`

```ts title="Signature"
type OrderState = | 'Created'
    | 'Draft'
    | 'AddingItems'
    | 'Cancelled'
    | keyof CustomOrderStates
    | keyof OrderStates
```

## OrderTransitionData

<GenerationInfo sourceFile="packages/core/src/service/helpers/order-state-machine/order-state.ts" sourceLine="57" packageName="@vendure/core" />

This is the object passed to the [OrderProcess](/current/core/reference/typescript-api/orders/order-process#orderprocess) state transition hooks.

```ts title="Signature"
interface OrderTransitionData {
    ctx: RequestContext;
    order: Order;
}
```

<div className="members-wrapper">

### ctx

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>`}   />

### order

\<MemberInfo kind="property" type={`<a href='/current/core/reference/typescript-api/entities/order#order'>Order</a>`}   />

</div>
