-
Notifications
You must be signed in to change notification settings - Fork 41
Fulfillment Application Design Document
Order fulfillment is 3 step process,
-
Step 1: The staff gets the list of Outstanding orders. The user then starts the fulfillment process for set of orders by creating a Fulfillment wave of orders. A PickList is returned for the user to go pick items for preparing the shipments. On success of createOrderFulfillmentWave the OrderItems are tagged "isPicked: Y" in SOLR doc. Alternatively the user can choose to rejectOrderItem if for some reason orderItem cannot be fulfilled.
-
Step 1 - Background process: Shipments are created for orders. Based on the inventory allocation rules inventory from a certain location is assigned to Shipment, a background process is initiated to get shipping labels from the shipping provider.
-
Step 2: User completes the Packing. Alternatively user can choose to rejectShipmentItem.
-
Step 3: User marks Shipment shipped.
Shipment is created in SHIPMENT_INPUT, then SHIPMENT_APPROVED to SHIPMENT_PACKED and then SHIPMENT_SHIPPED
- On the SHIPMENT_APPROVED status event of Shipment lifecycle, systems triggers the process to get Shipping Label (doRateShopping) from the logistics company.
- On successful execution of shipping label RateShopping, the RateShopping service updates the update ShipmentRouteSegment. Set
shipmentMethodTypeId
,carrierPartyId
,actualCost
,carrierServiceStatusId
(SHRSCS_CONFIRMED). - Once we have Shipping label, Shipment can be moved to SHIPMENT_PACKED status.
Modify contents of the Shipment after it is already SHIPMENT_APPROVED or SHIPMENT_PACKED.
- If the Approved shipment should be edited, The Shipment is first reinitializeShipment.
- In case the Packed shipment should be edited, It is first Unpacked. The Unpacking process moves the shipment to Approved status.
- If Shipment package contents are modified i.e a Shipment was moved from SHIPMENT_APPROVED status to SHIPMENT_INPUT, ensure to voidShipmentPackageLabel. Recompute the ShipmentPackageWeight.
- In some cases, after edits we may have hanging some Shipments without any ShipmentItem. Use cancelEmptyShipments to cancel them.
<!-- ShipmentRouteSegment CarrierService status -->
<StatusType description="ShipmentRouteSegment:CarrierService" hasTable="N" statusTypeId="SHPRTSG_CS_STATUS"/>
<StatusItem description="Not Started" sequenceId="01" statusCode="NOT_STARTED" statusId="SHRSCS_NOT_STARTED" statusTypeId="SHPRTSG_CS_STATUS"/>
<StatusItem description="Confirmed" sequenceId="02" statusCode="CONFIRMED" statusId="SHRSCS_CONFIRMED" statusTypeId="SHPRTSG_CS_STATUS"/>
<StatusItem description="Accepted" sequenceId="03" statusCode="ACCEPTED" statusId="SHRSCS_ACCEPTED" statusTypeId="SHPRTSG_CS_STATUS"/>
<StatusItem description="Voided" sequenceId="08" statusCode="VOIDED" statusId="SHRSCS_VOIDED" statusTypeId="SHPRTSG_CS_STATUS"/>
<StatusValidChange statusId="SHRSCS_NOT_STARTED" statusIdTo="SHRSCS_CONFIRMED" transitionName="Confirm"/>
<StatusValidChange statusId="SHRSCS_CONFIRMED" statusIdTo="SHRSCS_ACCEPTED" transitionName="Accept"/>
<StatusValidChange statusId="SHRSCS_CONFIRMED" statusIdTo="SHRSCS_VOIDED" transitionName="Void"/>
<StatusValidChange statusId="SHRSCS_ACCEPTED" statusIdTo="SHRSCS_VOIDED" transitionName="Void"/>
- Has one Package, this eliminates the need for ShipmentPackageContent entity.
- The Shipment will have one ShipmentPackage, one ShipmentRouteSegment
- All ShipmentItems are assumed to be packed in one Package and tracked using ShipmentRouteSegment
- Setup Faciity with Locations
- Setup Product and Inventory configurations
- Import product Inventory
- Import Orders
- Setup Fulfillment user roles and responsibilities.
- PickList and Picking
- Shipment lifecycle
- Shipping Gateway configuration
Shipping Gateway configuration
- PickList is created, the list of assigned Pickers reconciles with the request
- The OrderItem count and the PicklistOrderItem record counts reconciles
- The number of uniqui shipGroupSeqId reconciles with the number of Shipments, Packages, RouteSegments created.
- The number records for each orderId and ShipmentId combination in OrderShipment table reconciles with ShipmentItems