Skip to content

Fulfillment Application Design Document

Anil K Patel edited this page Nov 26, 2024 · 2 revisions

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.

  1. If the Approved shipment should be edited, The Shipment is first reinitializeShipment.
  2. In case the Packed shipment should be edited, It is first Unpacked. The Unpacking process moves the shipment to Approved status.
  3. 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.
  4. 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"/>

HotWax Commerce Shipment

  • 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

Pre-Requisits, NOT included in Fulfillment App.

  1. Setup Faciity with Locations
  2. Setup Product and Inventory configurations
  3. Import product Inventory
  4. Import Orders
  5. Setup Fulfillment user roles and responsibilities.

Fulfillment App

  1. PickList and Picking
  2. Shipment lifecycle
  3. Shipping Gateway configuration

Shipping Gateway configuration

  1. Shipping Carrier

UAT

List of scenarios to test createOrderFulfillmentWave

  • 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

Ships together scenario

Digital Goods shipment

Physical Gift card shipment

Marketing material and bonus material