Supply Chain

This example provides a general overview of what a supply chain record may include. It is not exhaustive of possibilities and many items are optional.

{
	"@context": "https://restfulchain.com/voc1/",
	"@id": "https://rc.example.com/rc/gs1/01/01234567890128",
	"@type": "rc1:RestfulchainSupply",
	"rc1:dateModifiedTo": null,
	"rc1:modifiedToURI": null,
	"rc1:dateDeleted": null,
	"rc1:digestValue": "SHA256 hash of the entire rc1:content object, including input hashes",
        "rc1:inventoryLevel": "Default approach to handle inventory levels"**
	"rc1:content": {
		"@context": [
			"https://restfulchain.com/voc1/",
			"https://gs1.org/voc/"
		],
		"@id": "https://rc.example.com/rc/gs1/01/01234567890128",
		"@type": "gs1:Offer",
		"rc1:dateCreated": "2023-04-01 15:31Z",
		"rc1:modifiedFromURI": null,
		"rc1:modifiedFromDigestValue": "SHA256 hash matching (verified) of modifiedFromURI URI's rc1:digestValue",
		"rc1:nonce": "A453B537C363D45E483F",
		"gs1:availabilityStarts": "2023-04-01 15:31Z",
		"gs1:availabilityEnds": "2024-12-31 23:59Z",
		"gs1:seller": {
			"@type": "gs1:Organization",
			"gs1:organizationName": "Seller Name",
			"gs1:logo": "https://seller.com/logo.jpg",
			"gs1:address": {
				"@type": "gs1:PostalAddress",
				"gs1:streetAddress": "1234 Street Name; include all PostalAddress Fields"
			},
			"gs1:geo": {
				"@type": "gs1:GeoCoordinates",
				"gs1:latitude": "Seller Latitude",
				"gs1:longitude": "Seller Longitude"
			}
		},
		"gs1:itemOffered": {
			"@id": "https://rc.example.com/rc/gs1/01/01234567890128/itemOffered",
			"@type": "gs1:Product",
			"gs1:gtin": "01234567890128",
			"gs1:productName": "Example Product",
			"gs1:image": "https://example.com/product-image.jpg",
			"gs1:productDescription": "Detailed description of the product.",
			"gs1:hasBatchLotNumber": "BATCH2023A",
			"gs1:productionDate": "2023-04-01",
			"gs1:expirationDate": "2024-12-31",
			"gs1:manufacturer": {
				"@type": "gs1:Organization",
				"gs1:organizationName": "Manufacturer Name",
				"gs1:logo": "https://example.com/logo.jpg",
				"gs1:address": {
					"@type": "gs1:PostalAddress",
					"gs1:streetAddress": "1234 Street Name; include all PostalAddress Fields"
				},
				"gs1:geo": {
					"@type": "gs1:GeoCoordinates",
					"gs1:latitude": "Manufacturer Latitude",
					"gs1:longitude": "Manufacturer Longitude"
				}
			},
			"gs1:certification": [
				{
					"@type": "gs1:CertificationDetails",
					"gs1:certificationType": "Lab Test Result",
					"gs1:certificationAgency": "Certifying Organization Name",
					"gs1:certificationURI": "https://certdom.com/info/01234567890128",
					"rc1:uriType": "rc1:Restfulchain",
					"rc1:uriDigestValue": "SHA256 hash matching (verified) of this URI's rc1:digestValue"
				}
			],
			"rc1:input": [
				{
					"@id": "https://rc.acme.com/rc/gs1/01/01234567890128",
					"@type": "gs1:Product",
					"rc1:uriType": "rc1:Restfulchain",
					"rc1:uriDigestValue": "SHA256 hash matching (verified) of this @id's rc1:digestValue",
					"gs1:productName": "Input Product 1",
					"gs1:gtin": "09876543210987",
					"gs1:hasBatchLotNumber": "BATCH1A",
					"gs1:expirationDate": "2025-06-30",
					"gs1:productionDate": "2023-01-20",
					"gs1:manufacturer": {
						"@type": "gs1:Organization",
						"gs1:organizationName": "Input Supplier 1",
						"gs1:address": {
							"@type": "gs1:PostalAddress",
							"gs1:streetAddress": "Country of Origin 1; include all PostalAddress Fields"
						},
						"gs1:geo": {
							"@type": "gs1:GeoCoordinates",
							"gs1:latitude": "Input Manufacturer Latitude",
							"gs1:longitude": "Input Manufacturer Longitude"
						}
					},
					"gs1:certification": [
						{
							"@type": "gs1:CertificationDetails",
							"gs1:certificationType": "Lab Test Result for Input 1",
							"gs1:certificationAgency": "Certifying Organization for Input 1",
							"gs1:certificationURI": "https://certdom.com/cert-info/09876543210987.pdf",
							"rc1:uriType": "Other",
							"rc1:uriEncodingFormat": "application/pdf",
							"rc1:uriDigestValue": "SHA256 hash matching (verified) of this URI's HTTP Body"
						}
					]
				}
			]
		}
	},
	"gs1:priceSpecification": [
		{
			"@type": "gs1:PriceSpecification",
			"gs1:priceCurrency": "USD",
			"gs1:price": "19.99",
			"gs1:eligibleQuantityMaximum": 99
		},
		{
			"@type": "gs1:PriceSpecification",
			"gs1:priceCurrency": "USD",
			"gs1:price": "17.99",
			"gs1:eligibleQuantityMinimum": 100,
			"gs1:eligibleQuantityMaximum": 499
		},
		{
			"@type": "gs1:PriceSpecification",
			"gs1:priceCurrency": "USD",
			"gs1:price": "15.99",
			"gs1:eligibleQuantityMinimum": 500
		}
	]
}

Location of Inventory Data**
- Default approach (Recommended) : By default, inventory levels should be stored in the RESTfulChain header. This allows inventory updates without creating new content records
- Immutable History Approach : For scenarios requiring verified inventory history, inventory data can be stored in the content block.This allows to creates an immutable record of inventory changes