Legacy event formats
This section lists the legacy event format of the events in the Inventory service. The existing events will continue to be delivered in older format which is now being referred to as legacy format. Eventually, all legacy events will also be migrated to a new event formats.
| Event ID in Inventory Visibility | Event code in Payload |
|---|---|
| Supply.Change | supplyChange |
| ProductAvailabilityToSell.DistributionGroupSnapshot | dgAvailabilitySnapshot |
| ProductAvailabilityToSell.ShipNodeChange | productAvailability |
| DgAvailabilityChange | dgAvailabilityChange |
| ProductAvailabilityToSell.ShipNodeSnapshot | productAvailabilitySnapshot |
| Demand.Change | demandChange |
- Supply.Change
-
When the supply changes for an item, the
Supply.Changeevent is triggered. The code for this event issupplyChange.The following sample JSON is an example of a published event.Note: The files on IBM Cloud® Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.{ "eventbatch":[ { "channel":"Order Management", "identifiers":[], "events":[ { "code": "supplyChange", "timestamp": "2020-01-18T06:00:00.021Z", "attributes": [ { "name":"tenantId", "type":"String", "value":"tenant1" }, { "name":"productID", "type":"String", "value":"SKU1024" }, { "name":"unitOfMeasure", "type":"String", "value":"EACH" }, { "name":"productClass", "type":"String", "value":"NEW" }, { "name":"shipNode", "type":"String", "value":"Matrix-Store-001" }, { "name":"shipByDate", "type":"dateTime", "value":"2500-01-01T00:00:00.000Z" }, { "name":"lineReference", "type":"String", "value":"" }, { "name":"reference", "type":"String", "value":"" }, { "name":"referenceType", "type":"String", "value":"" }, { "name":"segment", "type":"String", "value":"" }, { "name":"segmentType", "type":"String", "value":"" }, { "name":"quantity", "type":"Number", "value":"1.0" }, { "name":"changedQuantity", "type":"Number", "value":"1.0" }, { "name":"type", "type":"String", "value":"ONHAND_BACKROOM_01" }, { "name":"baseType", "type":"String", "value":"ONHAND" }, { "name":"tagNumber", "type":"String", "value":"|||" }, { "name":"updatedTs", "type":"dateTime", "value":"IGNORE_VALUE" }, { "name":"eta", "type":"dateTime", "value":"1900-01-01T00:00:00.000Z" }, { "name":"adjustmentReason", "type":"String", "value":"ADJUSTMENT" } ] }, { "code":"supplyChange", "timestamp":"2020-01-03T15:48:02Z", "attributes":[ { "name":"tenantId", "value":"tenant1", "type":"String"}, { "name":"productID", "value":"SKU1024", "type":"String"}, { "name":"unitOfMeasure", "value":"EACH", "type":"String"}, { "name":"productClass", "value":"NEW", "type":"String"}, { "name":"lineReference", "value":" ", "type":"String"}, { "name":"shipNode", "value":"Matrix-Store-002", "type":"String"}, { "name":"shipByDate", "value":"2500-01-01T00:00:00Z", "type":"dateTime"}, { "name":"reference", "value":" ", "type":"String"}, { "name":"referenceType", "value":" ", "type":"String"}, { "name":"quantity", "value":"200.0", "type":"Number"}, { "name":"segment", "value":" ", "type":"String"}, { "name":"segmentType", "value":" ", "type":"String"}, { "name":"type", "type":"String", "value":"ONHAND_BACKROOM_01" }, { "name":"baseType", "type":"String", "value":"ONHAND" }, { "name":"tagNumber", "type":"String", "value":"|||" }, { "name":"updatedTs", "value":"2020-01-03T15:47:48Z", "type":"dateTime"}, { "name":"eta", "value":"1900-01-01T00:00:00Z", "type":"dateTime"}, { "name":"adjustmentReason", "type":"String", "value":"ADJUSTMENT" } ]} ] }] }The
updatedTsfield indicates the time when the database was updated for this supply. If no database record is present, then it will be null during theforcePublish. By default when a supply sync is performed, the supply change event is published only for those records which have to be upserted as part of the supply sync. However, whenforcePublishis passed as true in a supply sync, an event is published for every supply record that is part of supply sync. This, in turn, publishes node and network availability change events as well, regardless of change in availability due to incoming supply record. If a supply record is not present in the system and is ignored as part of the sync process thenupdatedTsis null for this record's event. - ProductAvailabilityToSell.DistributionGroupSnapshot
-
This event is used to gather the snapshot of availability for a specific DG or all DGs belonging to the tenant.
The following sample JSON is an example of a published event.Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.{ "type": "dgAvailabilitySnapshot", "datacontenttype": "application/json", "id": "2a8d36a3-485b-3fc0-bd15-d530625a6ec5", "specversion": "1.0", "time": "2021-03-10T00:00:00.288Z", "data": { "tenantId" : "tenant1", "snapshotId" : "bae67c1d-be0f-6b4e-1233-ffc924607fa0", "productID" : "SKU1024", "unitOfMeasure" : "EACH", "productClass" : "NEW", "deliveryMethod" : "SHP", "segment" : " ", "segmentType" : " ", "distributionGroupId" : "US_Group", "computeTs" : "2020-01-03T15:47:44Z", "thresholdLevel" : 1, "thresholdType" : "REALTIME_ONHAND", "totalAvailableQuantity" : 98.0, "onhandAvailableQuantity" : 38.0, "futureAvailableQuantity" : 60.0, "earliestOnhandAvailableDate" : "1900-01-01T00:00:00.000Z", "latestOnhandAvailableDate" : "1900-01-01T00:00:00.000Z", "earliestFutureAvailableDate" : "2020-12-31T05:00:00.000Z", "latestFutureAvailableDate" : "2020-12-31T05:00:00.000Z", "totalReservedQuantityWithheld" : 10.0, "firstReservedExpiryTs" : "2020-01-08T08:10:00Z", "lastReservedExpiryTs" : "2020-01-08T20:45:00Z", "onhandSafetyQuantityWithheld" : 0.0, "futureSafetyQuantityWithheld" : 0.0, "totalSafetyQuantityWithheld" : 0.0, "totalShortageQuantity" : 0.0 } }The following end of file (EOF) sample is an example of a published event:
You can manually trigger the snapshot for a specific distribution group by calling the{ "type": "dgAvailabilitySnapshot", "datacontenttype": "application/json", "id": "736af2e8-86c0-3ccf-a134-79854ab0b6c6", "specversion": "1.0", "time": "2020-05-21T00:00:00.328Z", "data": { "snapshotId": "DGSnapshotTest01", "tenantId": "tenant1" } }publish_allAPI. ThedgAvailabilitySnapshot publish_allAPI returns a job URL along with thejobId. It also publishes a dummy event when the process is complete, which has the same format as the normal message, but it omits all attributes other thantenantIdandsnapshotId. You can generate a snapshot for a specific distribution group or all of them.For more information, see REST API documentation.
- ProductAvailabilityToSell.ShipNodeChange
-
When the availability for an item at a ship node changes, the
ProductAvailabilityToSell.ShipNodeChangeevent is triggered. The code for this event isproductAvailability.The following sample JSON is an example of a published event.Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
To ensure that external systems can calculate availability without considering safety stock, the following attributes are included in the event.{ "eventbatch":[ { "channel":"Order Management", "identifiers":[], "events":[ { "code":"productAvailability", "timestamp":"2020-01-03T15:48:01Z", "attributes":[ { "name":"tenantId", "value":"tenant1", "type":"String"}, { "name":"productID", "value":"SKU1024", "type":"String"}, { "name":"unitOfMeasure", "value":"EACH", "type":"String"}, { "name":"productClass", "value":"NEW", "type":"String"}, { "name":"deliveryMethod", "value":"SHP", "type":"String"}, { "name":"segment", "value":"WALK_IN", "type":"String"}, { "name":"segmentType", "value":"CHANNEL", "type":"String"}, { "name":"shipNode", "value":"Matrix-Store-001", "type":"String"}, { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"}, { "name":"alertType", "value":"REALTIME_ONHAND", "type":"String"}, { "name":"alertLevel", "value":"1", "type":"Number"}, { "name":"totalAvailableQuantity", "value":"0", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"0", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"futureAvailableQuantity", "value":"20", "type":"Number"}, { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"}, { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"}, { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"}, { "name":"onhandSafetyQuantityWithheld", "value":"5", "type":"Number"}, { "name":"futureSafetyQuantityWithheld", "value":"10", "type":"Number"}, { "name":"totalSafetyQuantityWithheld", "value":"15", "type":"Number"}, { "name":"totalShortageQuantity", "value":"0", "type":"Number"} ] },{ "code":"productAvailability", "timestamp":"2020-01-03T15:48:02Z", "attributes":[ { "name":"tenantId", "value":"tenant1", "type":"String"}, { "name":"productID", "value":"SKU1024", "type":"String"}, { "name":"unitOfMeasure", "value":"EACH", "type":"String"}, { "name":"productClass", "value":"NEW", "type":"String"}, { "name":"deliveryMethod", "value":"PICK", "type":"String"}, { "name":"segment", "value":"WALK_IN", "type":"String"}, { "name":"segmentType", "value":"CHANNEL", "type":"String"}, { "name":"shipNode", "value":"Matrix-Store-001", "type":"String"}, { "name":"computeTs", "value":"2020-01-03T15:47:56Z", "type":"dateTime"}, { "name":"alertType", "value":"REALTIME_ONHAND", "type":"String"}, { "name":"alertLevel", "value":"1", "type":"Number"}, { "name":"totalAvailableQuantity", "value":"100.0", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"40.0", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"2020-01-02T00:00:00.000Z", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"2021-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"}, { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"}, { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"}, { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"}, { "name":"onhandSafetyQuantityWithheld", "value":"0", "type":"Number"}, { "name":"futureSafetyQuantityWithheld", "value":"0", "type":"Number"}, { "name":"totalSafetyQuantityWithheld", "value":"0", "type":"Number"}, { "name":"totalShortageQuantity", "value":"0", "type":"Number"} ] } ] }] }-
onhandSafetyQuantityWithheld- Safety stock quantity that is withheld from on hand availability.
-
futureSafetyQuantityWithheld- Safety stock quantity that is withheld from future availability.
-
totalSafetyQuantityWithheld- The total safety stock withheld, which is
onhandSafetyQuantityWithheldplusfutureSafetyQuantityWithheld.
-
totalShortageQuantity- Currently, this attribute is used as a dummy value to allow Inventory Visibility to derive availability without considering safety stock. The value is always 0.
-
fulfillmentAllowed- Indicates whether the inventory availability for the specific item, node, or delivery method is overridden by fulfillment option settings. The fulfillment option is configurable at both the node and item level. For more information, see Item fulfillment options.
-
- DgAvailabilityChange
-
When availability changes for a distribution group, the
DgAvailabilityChangeevent is triggered to record the change. The code for this event isdgAvailabilityChange.The following sample JSON is an example of a published event.Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.{ "eventbatch":[ { "channel":"Order Management", "identifiers":[], "events":[ { "code":"dgAvailabilityChange", "timestamp":"2020-01-03T15:48:02Z", "attributes":[ { "name":"tenantId", "value":"tenant1", "type":"String"}, { "name":"snapshotId", "value":"", "type":"String"}, { "name":"productID", "value":"SKU1024", "type":"String"}, { "name":"unitOfMeasure", "value":"EACH", "type":"String"}, { "name":"productClass", "value":"NEW", "type":"String"}, { "name":"deliveryMethod", "value":"SHP", "type":"String"}, { "name":"segment", "value":"", "type":"String"}, { "name":"segmentType", "value":"", "type":"String"}, { "name":"distributionGroupId", "value":"US_Group", "type":"String"}, { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"}, { "name":"thresholdLevel", "value":"1", "type":"Number"}, { "name":"thresholdType", "value":"REALTIME_ONHAND", "type":"String"}, { "name":"totalAvailableQuantity", "value":"100.0", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"40.0", "type":"Number"}, { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"} { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"}, { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"}, { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"}, { "name":"onhandSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"futureSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"totalSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"totalShortageQuantity", "value":"0", "type":"Number"} ] },{ "code":"dgAvailabilityChange", "timestamp":"2020-01-03T15:48:03Z", "attributes":[ { "name":"tenantId", "value":"tenant1", "type":"String"}, { "name":"snapshotId", "value":"", "type":"String"}, { "name":"productID", "value":"SKU1024", "type":"String"}, { "name":"unitOfMeasure", "value":"EACH", "type":"String"}, { "name":"productClass", "value":"NEW", "type":"String"}, { "name":"deliveryMethod", "value":"PICK", "type":"String"}, { "name":"segment", "value":"", "type":"String"}, { "name":"segmentType", "value":"", "type":"String"}, { "name":"distributionGroupId", "value":"US_Group", "type":"String"}, { "name":"computeTs", "value":"2020-01-03T15:47:44Z", "type":"dateTime"}, { "name":"thresholdLevel", "value":"1", "type":"Number"}, { "name":"thresholdType", "value":"REALTIME_ONHAND", "type":"String"}, { "name":"totalAvailableQuantity", "value":"98.0", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"38.0", "type":"Number"}, { "name":"futureAvailableQuantity", "value":"60.0", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"1900-01-01T00:00:00.000Z", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"2020-12-31T05:00:00.000Z", "type":"dateTime"} { "name":"totalReservedQuantityWithheld", "value":"10.0", "type":"Number"}, { "name":"firstReservedExpiryTs", "value":"2020-01-08T08:10:00Z", "type":"dateTime"}, { "name":"lastReservedExpiryTs", "value":"2020-01-08T20:45:00Z", "type":"dateTime"}, { "name":"onhandSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"futureSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"totalSafetyQuantityWithheld", "value":"0.0", "type":"Number"}, { "name":"totalShortageQuantity", "value":"0", "type":"Number"} ] } ] }] }Note: For manually triggering a complete snapshot of the availability for a distribution group refer to ProductAvailabilityToSell.DistributionGroupSnapshot API. For more information, see REST API documentation. - ProductAvailabilityToSell.ShipNodeSnapshot
-
Use the
ProductAvailabilityToSell.ShipNodeSnapshotevent to send a snapshot (on demand) of availability for a specific node, all nodes, or nodes that belong to a distribution group. The code for this event isproductAvailabilitySnapshot.The following sample JSON is an example of a published event.Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.
The following EOF sample is an example of a published event:{ "channel":"Order Management", "identifiers":[], "events":[ { "code":"productAvailabilitySnapshot", "timestamp":"<time ISO-8601 format>", "attributes":[ { "name":"tenantId", "value":"", "type":"String"}, { "name":"jobId", "value":"", "type":"String"}, { "name":"productID", "value":"", "type":"String"}, { "name":"unitOfMeasure", "value":"", "type":"String"}, { "name":"productClass", "value":"", "type":"String"}, { "name":"shipNode", "value":"", "type":"String"}, { "name":"deliveryMethod", "value":"", "type":"String"}, { "name":"segmentType", "value":"", "type":"String"}, { "name":"segment", "value":"", "type":"String"}, { "name":"computeTs", "value":"", "type":"dateTime"}, { "name":"thresholdLevel", "value":"", "type":"Number"}, { "name":"thresholdType", "value":"", "type":"String"}, { "name":"totalAvailableQuantity", "value":"", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"", "type":"Number"}, { "name":"futureAvailableQuantity", "value":"", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"", "type":"dateTime"}, { "name":"totalReservedQuantityWithheld", "value":"0.0", "type":"Number"} { "name":"totalSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"onhandSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"futureSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"totalShortageQuantity","value":"","type":"Number"} ] } ] }{ "code":"productAvailabilitySnapshot", "timestamp":"IGNORE_VALUE", "attributes": [ {"name":"tenantId","value":"tenant1","type":"String"}, {"name":"snapshotId","value":"736af2e8-86c0-3ccf-a134-79854ab0b6c6","type":"String"} ] } { "code":"productAvailabilitySnapshot", "timestamp":"<time ISO-8601 format>", "attributes":[ { "name":"tenantId", "value":"", "type":"String"}, { "name":"jobId", "value":"", "type":"String"}, { "name":"productID", "value":"", "type":"String"}, { "name":"unitOfMeasure", "value":"", "type":"String"}, { "name":"productClass", "value":"", "type":"String"}, { "name":"shipNode", "value":"", "type":"String"}, { "name":"deliveryMethod", "value":"", "type":"String"}, { "name":"segmentType", "value":"", "type":"String"}, { "name":"segment", "value":"", "type":"String"}, { "name":"computeTs", "value":"", "type":"dateTime"}, { "name":"thresholdLevel", "value":"", "type":"Number"}, { "name":"thresholdType", "value":"", "type":"String"}, { "name":"totalAvailableQuantity", "value":"", "type":"Number"}, { "name":"onhandAvailableQuantity", "value":"", "type":"Number"}, { "name":"futureAvailableQuantity", "value":"", "type":"Number"}, { "name":"earliestOnhandAvailableDate", "value":"", "type":"dateTime"}, { "name":"latestOnhandAvailableDate", "value":"", "type":"dateTime"}, { "name":"earliestFutureAvailableDate", "value":"", "type":"dateTime"}, { "name":"latestFutureAvailableDate", "value":"", "type":"dateTime"}, { "name":"totalReservedQuantityWithheld", "value":"0.0", "type":"Number"} { "name":"totalSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"onhandSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"futureSafetyQuantityWithheld","value":"","type":"Number"}, { "name":"totalShortageQuantity","value":"","type":"Number"} ] }You can manually trigger the snapshot for a specific node by calling the publish_all API. The ShipNodeSnapshot publish_all API returns a job URL along with thejobId. It also publishes a dummy event when the process is complete, which has the same format as the normal message, but it omits all attributes other thantenantIdandsnapshotId. ThesnapshotIdis a UUID to recognize the event.Tip: You can generate a snapshot for a specific node, all nodes, or nodes that belong to a distribution group.https://api.watsoncommerce.ibm.com/<tenantId>/v1/configuration/events/ProductAvailabilityToSell.ShipNodeSnapshot/publish_allThe
fulfillmentAllowedattribute is included in the event that indicates whether the inventory availability for the specific item, node, or delivery method is overridden by fulfillment option settings. The fulfillment option is configurable at both the node and item level. For more information, see Item fulfillment options.For more information, see REST API documentation.
- Demand.Change
- You can publish the demand change data to an external system for analytics in inventory. Such
data would enable the supply chain (SC) manager to be alerted when there is a sudden flux of
inventory demand. For example, if there is a sudden hand sanitizer demand spike, the SC manager can
quickly alter the fulfillment strategy to mitigate contractual damage to some of the high valued
buyers. The following sample payload is an example of a published event. The inventory event ID is
Demand.Changeand event code in payload isdemandChange.Note: The files on IBM Cloud Object Storage can contain multiple lines per file. The file is not a valid JSON object but each line in the file is a valid JSON object.{ "specversion" : "1.0", "datacontenttype" : "application/json", "type": "demandChange", "id": "<UUID>", "time": "<time ISO-8601 format>", "data": { "itemId": "SHIRT", "unitOfMeasure": "EACH", "productClass": "CLASS_1", "tagNumber": "A|02", "shipNode": "store-BostonMA", "baseType": "OPEN_ORDER", "type": "CUSTOM_OPEN_ORDER", "segment": "Web", "segmentType": "Channel", "shipDate": "2020-05-29T13:00:00.000Z", "cancelDate": "2020-06-28T13:00:00.000Z", "minShipByDate": "2022-01-22T05:00:00.000Z", "quantity": 3.0, "changedQuantity": 2.0, "updatedTs": "2020-05-28T06:00:00.000Z", "adjustmentReason" : "PROCESS" } }The
updatedTsfield indicates the time when the database was updated for this demand.