diff --git a/.gitignore b/.gitignore index d72a9634..1992ebaa 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ yarn-error.log testem.log /typings .env +minio_data/* # Yarn .yarn/* diff --git a/app-config.acrs.json b/app-config.acrs.json new file mode 100644 index 00000000..7e5333a9 --- /dev/null +++ b/app-config.acrs.json @@ -0,0 +1,2865 @@ +{ + "name": "ACRS", + "styles": { + "primaryColor": "rgb(35, 138, 186)", + "secondaryColor": "black", + "tertiaryColor": "black" + }, + "generalFeatures": [ + { + "name": "General features", + "type": "", + "styles": { + "primaryColor": "rgb(35, 138, 186)", + "secondaryColor": "black", + "tertiaryColor": "black" + }, + "features": [] + } + ], + "apps": [ + { + "name": "Top Line Steel", + "type": "producer", + "assets": { + "logo": "https://storage.googleapis.com/acrs-assets/logos/Top-Line-Steel-Logo.jpg", + "brandTitle": "Top Line Steel", + "passportVC": "", + "transactionEventVC": "" + }, + "styles": { + "primaryColor": "#b22166", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "productIdentifier": [ + { + "scheme": "https://identifier.example.org/steel", + "identifierValue": "0109359502000010", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/steel/12345/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://batch.example.org", + "identifierValue": "BATCH-67890", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://batch.example.org/67890/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://item.example.org", + "identifierValue": "ITEM-112233", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://item.example.org/112233/binding" + } + } + ], + "classification": [ + { + "scheme": "https://unstats.un.org/unsd/classifications/Econ/cpc", + "classifierValue": "41231", + "classifierName": "Steel Rods", + "classifierURL": "https://vocabulary.uncefact.org/unlocode#AUSYD" + } + ], + "modelName": "Steel Model X", + "image": "data:image/webp;base64,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", + "description": "High-quality steel rods for construction.", + "furtherInformation": "https://example.org/products/steel_model_x", + "manufacturedDate": "2024-05-20", + "dimension": { + "weight": { "value": 1500, "unit": "KG" }, + "length": { "value": 6, "unit": "MTR" }, + "width": { "value": 0.1, "unit": "MTR" }, + "height": { "value": 0.1, "unit": "MTR" }, + "volume": { "value": 0.6, "unit": "CMT" } + }, + "characteristic": {}, + "manufacturer": { + "id": "did:example:123456789abcdefghi", + "name": "Steel Manufacturer Inc.", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-56789", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/56789/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-1234", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/1234/binding" + } + } + ], + "name": "Main Steel Plant", + "location": "https://plus.codes/4RRG6RJX+W3", + "operatedBy": { + "id": "did:example:567890abcdefghi", + "name": "Steel Manufacturer Inc.", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-56789", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/56789/binding" + } + } + ] + } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://textileexchange.org/materials", + "classifierValue": "STEEL", + "classifierName": "Carbon Steel" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "conformityClaim": [ + { + "topic": "Structural Steel Certification", + "standardOrRegulation": "https://example.org/standards/environment", + "criteriaReference": "https://example.org/standards/environment/criteria", + "claimedValues": [], + "benchmarkValue": {}, + "benchmarkReference": "https://example.org/benchmarks/environment", + "conformance": true, + "conformityEvidence": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://acrs.pyx.io/verify?q=%7B%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fstorage.googleapis.com%2Fverifiable-credentials%2Fconformity-credentials%2Ftop-line-steel-dcc.json%22%7D%7D" + } + } + ], + "recyclingInstruction": "https://example.org/recycling/steel_model_x" + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Steel

Business identifier
85 652 929 014
Location
Rooty Hill, NSW
Identity verification
85 652 929 014
Other evidence

Steel Compliance Certificate

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Manuf. Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Length

{{credentialSubject.dimension.length.value}}{{credentialSubject.dimension.length.unit}}

Width

{{credentialSubject.dimension.width.value}}{{credentialSubject.dimension.width.unit}}

Height

{{credentialSubject.dimension.height.value}}{{credentialSubject.dimension.height.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Steel Passport", + "dlrIdentificationKeyNamespace": "gs1", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/productIdentifier/0/identifierValue" + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "topLineSteel_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Sale Steel", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "topLineSteel_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:api.acrs.pyx.io:top-line-steel", + "name": "Top Line Steel", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:api.acrs.pyx.io:steel-processor", + "name": "Steel Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyNamespace": "gs1", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "topLineSteel_dpps", "keyPath": "/epcList/index/name" } + } + ] + } + ] + } + ] + }, + { + "name": "Quality Steel", + "type": "producer", + "assets": { + "logo": "https://storage.googleapis.com/acrs-assets/logos/Quality-Steel-Logo.png", + "brandTitle": "Quality Steel", + "passportVC": "", + "transactionEventVC": "" + }, + "styles": { + "primaryColor": "#000000", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "productIdentifier": [ + { + "scheme": "https://identifier.example.org/steel", + "identifierValue": "0109359502000041", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/steel/67890/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://batch.example.org", + "identifierValue": "BATCH-54321", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://batch.example.org/54321/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://item.example.org", + "identifierValue": "ITEM-445566", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://item.example.org/445566/binding" + } + } + ], + "classification": [ + { + "scheme": "https://unstats.un.org/unsd/classifications/Econ/cpc", + "classifierValue": "41232", + "classifierName": "Steel Coil", + "classifierURL": "https://vocabulary.uncefact.org/unlocode#GBLON" + } + ], + "modelName": "Steel Model Y", + "image": "data:image/octet-stream;base64,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IjIwMjEtMDQtMDZUMTY6MTQ6MDYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTA0LTA2VDE2OjE0OjA2KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGVmMjFlZjgtYTk2Ny04OTQ0LWI5MGYtOTMxM2Y3MTNiYmU4IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MTZlOWU4ZjUtYTA1Zi1kNTQzLTg1ZGItMmVkYTQ2MTA5ZWU5IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MzVmZWQzZTgtZTZhNC00MzQ3LWEwOGQtOTFiZjA0ZWJhNTA0IiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNWZlZDNlOC1lNmE0LTQzNDctYTA4ZC05MWJmMDRlYmE1MDQiIHN0RXZ0OndoZW49IjIwMjEtMDQtMDZUMTY6MTM6NTgrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTAxZjdmNzYtMzBkZi1jYjRjLWIxM2UtOTUwMjllYTJlMjYzIiBzdEV2dDp3aGVuPSIyMDIxLTA0LTA2VDE2OjE0OjA2KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGVmMjFlZjgtYTk2Ny04OTQ0LWI5MGYtOTMxM2Y3MTNiYmU4IiBzdEV2dDp3aGVuPSIyMDIxLTA0LTA2VDE2OjE0OjA2KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmEwMWY3Zjc2LTMwZGYtY2I0Yy1iMTNlLTk1MDI5ZWEyZTI2MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNWZlZDNlOC1lNmE0LTQzNDctYTA4ZC05MWJmMDRlYmE1MDQiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNWZlZDNlOC1lNmE0LTQzNDctYTA4ZC05MWJmMDRlYmE1MDQiLz4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+RDYyNTZGMzU5MERGRjIxMzAxNUZFNjkwOUQ2MTc5MzQ8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pg==", + "description": "Steel Coil for construction and infrastructure projects.", + "furtherInformation": "https://example.org/products/steel_model_y", + "manufacturedDate": "2024-06-01", + "dimension": { + "weight": { "value": 2500, "unit": "KG" }, + "length": { "value": 100, "unit": "MTR" }, + "width": { "value": 1, "unit": "MTR" }, + "height": { "value": 0.005, "unit": "MTR" }, + "volume": { "value": 1.8, "unit": "CMT" } + }, + "characteristic": {}, + "manufacturer": { + "id": "did:example:abcdef1234567890", + "name": "Global Steel Co.", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-6789", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/6789/binding" + } + } + ], + "name": "Advanced Steel Plant", + "location": "https://plus.codes/4RRG4WWR+W5", + "operatedBy": { + "id": "did:example:0987654321abcdef", + "name": "Global Steel Co.", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://textileexchange.org/materials", + "classifierValue": "STEEL", + "classifierName": "Alloy Steel" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "conformityClaim": [ + { + "topic": "Structural Steel Certification", + "standardOrRegulation": "https://example.org/standards/environment", + "criteriaReference": "https://example.org/standards/environment/criteria", + "claimedValues": [], + "benchmarkValue": {}, + "benchmarkReference": "https://example.org/benchmarks/environment", + "conformance": true, + "conformityEvidence": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://acrs.pyx.io/verify?q=%7B%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fstorage.googleapis.com%2Fverifiable-credentials%2Fconformity-credentials%2Fquality-steel-dcc.json%22%7D%7D" + } + } + ], + "recyclingInstruction": "https://example.org/recycling/steel_model_y" + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Steel

Business identifier
93 669 605 341
Location
Smithfield, NSW
Identity verification
93 669 605 341
Other evidence

Steel Compliance Certificate

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Manuf. Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Length

{{credentialSubject.dimension.length.value}}{{credentialSubject.dimension.length.unit}}

Width

{{credentialSubject.dimension.width.value}}{{credentialSubject.dimension.width.unit}}

Height

{{credentialSubject.dimension.height.value}}{{credentialSubject.dimension.height.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Steel Passport", + "dlrIdentificationKeyNamespace": "gs1", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/productIdentifier/0/identifierValue" + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "qualitySteel_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Sale Steel", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "qualitySteel_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:api.acrs.pyx.io:quality-steel", + "name": "Quality Steel", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:api.acrs.pyx.io:steel-processor", + "name": "Steel Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyNamespace": "gs1", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "qualitySteel_dpps", "keyPath": "/epcList/index/name" } + } + ] + } + ] + } + ] + }, + { + "name": "Steel Processor", + "type": "processor", + "assets": { + "logo": "https://storage.googleapis.com/acrs-assets/logos/Steel-Processor-LogoV1.png", + "brandTitle": "Steel Processor", + "passportVC": "", + "transactionEventVC": "" + }, + "styles": { + "primaryColor": "#8f2629", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Process Steel", + "id": "process_product", + "components": [ + { + "name": "RenderCheckList", + "type": "EntryData", + "props": { + "requiredFieldPath": "/vc/credentialSubject/eventID", + "checkBoxLabel": "Imported valid json:", + "nestedComponents": [ + { + "name": "ImportButton", + "type": "EntryData", + "props": { + "label": "Import JSON", + "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" } + } + } + ], + "style": { "margin": "40px auto", "paddingTop": "40px", "width": "80%" } + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + }, + { + "name": "BarcodeGenerator", + "type": "Result", + "props": { + "dataPath": "/credentialSubject/outputEPCList/index/name" + } + } + ], + "services": [ + { + "name": "processTransformationEvent", + "parameters": [ + { + "epcisTransformationEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transformation-event-ld.json"], + "renderTemplate": [ + { + "template": " Transformation Event

TRACEABILITY EVENT

Transformation

EVENT ISSUED BY

{{issuer.name}}

Industry
Steel
Business identifier
55 126 272 964
Identity verification
55 126 272 964
Other evidence

Event description

Event ID
{{credentialSubject.eventID}}
Event type
{{credentialSubject.action}}
Description
Assemble Pile Cage
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
In Transit
Business step
Receiving
Process type
Assembly

Transformation

{{#each credentialSubject.outputEPCList}}

{{name}}

OUTPUT

Pile Cage

3M Pile Cage

Sustainability 100%
Confidence 100%
View
{{/each}}

Transformed

{{credentialSubject.inputEPCList.0.name}}

INPUT

Steel Rods

Mfg By: Top Line Steel

Sustainability 100%
Confidence 100%
View

{{credentialSubject.inputEPCList.1.name}}

INPUT

Steel Coil

Mig By: Quality Steel

Sustainability 100%
Confidence 100%
View
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransformationEventCredential"], + "dlrIdentificationKeyType": "gtin", + "dlrLinkTitle": "EPCIS transformation event VC", + "dlrIdentificationKeyNamespace": "gs1", + "dlrVerificationPage": "http://localhost:3003/verify", + "dlrQualifierPath": "" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Steel

Business identifier
55 126 272 964
Identity verification
55 126 272 964
Other evidence

Steel Compliance Certificate

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Traceability

Traceability events specify the “what, when, where, why and how” of the products and facilities that constitute a value chain.

{{#each credentialSubject.traceabilityInformation}}
{{eventType}}View
{{/each}}

Product information

Manuf. Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Length

{{credentialSubject.dimension.length.value}}{{credentialSubject.dimension.length.unit}}

Width

{{credentialSubject.dimension.width.value}}{{credentialSubject.dimension.width.unit}}

Height

{{credentialSubject.dimension.height.value}}{{credentialSubject.dimension.height.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["DigitalProductPassport"], + "dlrIdentificationKeyType": "gtin", + "dlrLinkTitle": "Digital Product Passport", + "dlrIdentificationKeyNamespace": "gs1", + "dlrVerificationPage": "http://localhost:3003/verify", + "dlrQualifierPath": "" + }, + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "transformationEventCredential": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/epcList/index/name", + "destinationPath": "/inputEPCList/index/name" + }, + { + "sourcePath": "/vc/credentialSubject/epcList/index/itemID", + "destinationPath": "/inputEPCList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/inputQuantityList", + "data": [ + { + "epcClass": "urn:epc:class:lgtin:4012345.012345.1000", + "quantity": 500, + "uom": "KGM" + }, + { + "epcClass": "urn:epc:class:lgtin:4012345.012345.1001", + "quantity": 300, + "uom": "KGM" + } + ] + }, + { + "path": "/outputQuantityList", + "data": [ + { + "epcClass": "urn:epc:class:lgtin:4012345.012345.2000", + "quantity": 200, + "uom": "KGM" + } + ] + }, + { + "path": "/outputEPCList", + "data": [{ "name": "0109359502000034" }] + }, + { + "path": "/action", + "data": "observe" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizLocation", + "data": "https://example.com/location/warehouse" + } + ], + "generationFields": [ + { + "path": "/outputEPCList/index/name", + "handler": "generateIdWithBatchLot" + }, + { + "path": "/outputEPCList/index/itemID", + "handler": "generateLinkResolver", + "dependencies": ["/outputEPCList/index/name"] + }, + { + "path": "/eventID", + "handler": "generateUUID" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + }, + "dppCredentials": [ + { + "mappingFields": [ + { + "sourcePath": "/linkResolver", + "destinationPath": "/traceabilityInformation/0/eventReference" + }, + { + "sourcePath": "/vc/credentialSubject/outputEPCList/0/name", + "destinationPath": "/productIdentifier/0/identifierValue" + }, + { + "sourcePath": "/vc/credentialSubject/outputEPCList/0/itemID", + "destinationPath": "/productIdentifier/0/binding/reference" + } + ], + "dummyFields": [ + { + "path": "/traceabilityInformation/0/eventType", + "data": "transformation" + }, + { + "path": "/batchIdentifier", + "data": [ + { + "scheme": "https://batch.example.org", + "identifierValue": "BATCH-77889", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://batch.example.org/77889/binding" + } + } + ] + }, + { + "path": "/itemIdentifier", + "data": [ + { + "scheme": "https://item.example.org", + "identifierValue": "ITEM-998877", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://item.example.org/998877/binding" + } + } + ] + }, + { + "path": "/classification", + "data": [ + { + "scheme": "https://unstats.un.org/unsd/classifications/Econ/cpc", + "classifierValue": "31254", + "classifierName": "Pile Cage", + "classifierURL": "https://vocabulary.uncefact.org/unlocode#USNYC" + } + ] + }, + { + "path": "/modelName", + "data": "Pile Cage" + }, + { + "path": "/image", + "data": "data:image/jpeg;base64,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" + }, + { + "path": "/description", + "data": "High-strength pile cage suitable for construction and industrial applications." + }, + { + "path": "/furtherInformation", + "data": "https://example.com/products/PileCage" + }, + { + "path": "/manufacturedDate", + "data": "2024-05-15" + }, + { + "path": "/dimension", + "data": { + "weight": { + "value": 1500, + "unit": "KG" + }, + "length": { + "value": 2.44, + "unit": "MTR" + }, + "width": { + "value": 1.22, + "unit": "MTR" + }, + "height": { + "value": 0.018, + "unit": "MTR" + }, + "volume": { + "value": 0.053, + "unit": "CMT" + } + } + }, + { + "path": "/manufacturer", + "data": { + "id": "did:example:123456789abcdefghi", + "name": "SteelWorks Ltd.", + "identifiers": [ + { + "scheme": "https://example.com/company-scheme", + "identifierValue": "SW-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/company/001/binding" + } + } + ] + } + }, + { + "path": "/manufacturedAt", + "data": { + "identifier": [ + { + "scheme": "https://example.com/facility-scheme", + "identifierValue": "FAC-002", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/facility/002/binding" + } + } + ], + "name": "SteelWorks Manufacturing Plant 2", + "location": "https://plus.codes/4RRG5V3W+28", + "operatedBy": { + "id": "did:example:123456789abcdefghi", + "name": "SteelWorks Ltd.", + "identifiers": [ + { + "scheme": "https://example.com/company-scheme", + "identifierValue": "SW-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/company/001/binding" + } + } + ] + } + } + }, + { + "path": "/materialsProvenance", + "data": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://example.com/material-scheme", + "classifierValue": "steel", + "classifierName": "Steel" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ] + }, + { + "path": "/conformityClaim", + "data": [ + { + "topic": "Structural Steel Certification", + "standardOrRegulation": "https://steel-industry.org/standards/sustainability", + "criteriaReference": "https://steel-industry.org/standards/sustainability/criteria", + "claimedValues": [], + "benchmarkValue": {}, + "benchmarkReference": "https://steel-industry.org/benchmarks/sustainability", + "conformance": true, + "conformityEvidence": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://acrs.pyx.io/verify?q=%7B%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fstorage.googleapis.com%2Fverifiable-credentials%2Fconformity-credentials%2Fsteel-processor-dcc.json%22%7D%7D" + } + } + ] + }, + { + "path": "/recyclingInstruction", + "data": "https://example.com/recycling/steelbeam-x200" + } + ] + } + ], + "identifierKeyPath": "/credentialSubject/outputEPCList/index/name" + } + ] + } + ] + } + ] + } + ], + "identifyProvider": { + "type": "gs1", + "url": "http://localhost:3001" + }, + "defaultVerificationServiceLink": { + "title": "Default Verification Service", + "context": "Default Verification Service", + "type": "application/json", + "href": "http://localhost:3332/agent/routeVerificationCredential", + "hreflang": ["en"], + "apiKey": "test123" + } +} diff --git a/app-config.json b/app-config.json index 31b0c812..27ce1358 100644 --- a/app-config.json +++ b/app-config.json @@ -1,5 +1,5 @@ { - "name": "Truffle Value Chain", + "name": "CHERRIES SUPPLY CHAIN TRACEABILITY", "styles": { "primaryColor": "rgb(35, 138, 186)", "secondaryColor": "black", @@ -19,11 +19,11 @@ ], "apps": [ { - "name": "Truffle Farm", + "name": "Orchard Facility", "type": "producer", "assets": { - "logo": "truffle-farm-logo.webp", - "brandTitle": "Truffle Farm" + "logo": "Cherries-farm-logo.webp", + "brandTitle": "Orchard Facility" }, "styles": { "primaryColor": "#b5651d", @@ -562,7 +562,7 @@ "productIdentifier": [ { "scheme": "https://id.gs1.org/gtin", - "identifierValue": "0105012345678900", + "identifierValue": "05012345678900", "binding": { "type": "document", "assuranceLevel": "3rdParty", @@ -572,23 +572,23 @@ ], "batchIdentifier": [ { - "scheme": "https://trufflefarm.example.org/batch", - "identifierValue": "BATCH-2024-001", + "scheme": "https://Cherriesfarm.example.org/batch", + "identifierValue": "2024001", "binding": { "type": "document", "assuranceLevel": "3rdParty", - "reference": "https://trufflefarm.example.org/batch/2024-001/binding" + "reference": "https://Cherriesfarm.example.org/batch/2024-001/binding" } } ], "itemIdentifier": [ { - "scheme": "https://trufflefarm.example.org/item", - "identifierValue": "TRF-24-0001", + "scheme": "https://Cherriesfarm.example.org/item", + "identifierValue": "TRF240001", "binding": { "type": "document", "assuranceLevel": "3rdParty", - "reference": "https://trufflefarm.example.org/item/TRF-24-0001/binding" + "reference": "https://Cherriesfarm.example.org/item/TRF-24-0001/binding" } } ], @@ -596,13 +596,13 @@ { "scheme": "https://www.unspsc.org", "classifierValue": "50383710", - "classifierName": "Truffles", + "classifierName": "Cherriess", "classifierURL": "https://www.unspsc.org/search-code/50383710" } ], - "modelName": "Black Truffle", - "description": "Premium Black Truffles harvested from our sustainable truffle orchards.", - "furtherInformation": "https://trufflefarm.example.org/products/black_perigord", + "modelName": "Black Cherries", + "description": "Premium Black Cherriess harvested from our sustainable Cherries orchards.", + "furtherInformation": "https://Cherriesfarm.example.org/products/black_perigord", "manufacturedDate": "2024-01-15", "dimension": { "weight": { "value": 50, "unit": "GRM" } @@ -613,7 +613,7 @@ "materialType": { "scheme": "https://www.gs1.org/gpc", "classifierValue": "10005953", - "classifierName": "Truffles (Fresh)", + "classifierName": "Cherriess (Fresh)", "classifierURL": "https://www.gs1.org/gpc/10005953" }, "massFraction": 100, @@ -629,7 +629,7 @@ }, "manufacturer": { "id": "did:example:123456789abcdefghi", - "name": "Gourmet Truffle Farm", + "name": "Gourmet Cherries Farm", "identifiers": [ { "scheme": "https://identifier.example.org/company", @@ -654,11 +654,11 @@ } } ], - "name": "Truffle Orchard", - "location": "https://trufflefarm.example.org/locations/perigord_orchard", + "name": "Cherries Orchard", + "location": "https://Cherriesfarm.example.org/locations/perigord_orchard", "operatedBy": { "id": "did:example:123456789abcdefghi", - "name": "Gourmet Truffle Farm", + "name": "Gourmet Cherries Farm", "identifiers": [ { "scheme": "https://identifier.example.org/company", @@ -673,6 +673,16 @@ } } }, + "constructData": { + "mappingFields": [], + "dummyFields": [], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + } + ] + }, "className": "json-form", "style": { "margin": "40px auto", @@ -694,7 +704,3722 @@ { "vckit": { "vckitAPIUrl": "http://localhost:3332/v1", - "issuer": "did:web:0e37-27-32-93-137.ngrok-free.app" + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Agriculture

Business identifier
75 859 224 235
Location
Rooty Hill, NSW
Identity verification
75 859 224 235
Other evidence

Conformity credentials

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Harvest Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Cherries Product Passport", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": { + "function": "concatService", + "args": [ + { "type": "text", "value": "(01)" }, + { "type": "path", "value": "/productIdentifier/0/identifierValue" }, + { "type": "text", "value": "(10)" }, + { "type": "path", "value": "/batchIdentifier/0/identifierValue" }, + { "type": "text", "value": "(21)" }, + { "type": "path", "value": "/itemIdentifier/0/identifierValue" } + ] + } + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "CherriesFarm_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Move to Next Facility", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "CherriesFarm_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Farm", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "CherriesFarm_dpps", "keyPath": "/epcList/index/name" } + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "orchard_facility_transaction_event", + "objectKeyPath": "/vc/credentialSubject/eventID" + } + ] + } + ] + } + ] + }, + { + "name": "Packhouse Facility", + "type": "producer", + "assets": { + "logo": "Cherries-farm-logo.webp", + "brandTitle": "Packhouse Facility" + }, + "styles": { + "primaryColor": "#b5651d", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "orchard_facility_transaction_event", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "image": "data:image/jpg;base64,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", + "productIdentifier": [ + { + "scheme": "https://id.gs1.org/gtin", + "identifierValue": "0105012345678900", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://id.gs1.org/gtin/05012345678900/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/batch", + "identifierValue": "BATCH-2024-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/batch/2024-001/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/item", + "identifierValue": "TRF-24-0001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/item/TRF-24-0001/binding" + } + } + ], + "classification": [ + { + "scheme": "https://www.unspsc.org", + "classifierValue": "50383710", + "classifierName": "Cherriess", + "classifierURL": "https://www.unspsc.org/search-code/50383710" + } + ], + "modelName": "Black Cherries", + "description": "Premium Black Cherriess harvested from our sustainable Cherries orchards.", + "furtherInformation": "https://Cherriesfarm.example.org/products/black_perigord", + "manufacturedDate": "2024-01-15", + "dimension": { + "weight": { "value": 50, "unit": "GRM" } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://www.gs1.org/gpc", + "classifierValue": "10005953", + "classifierName": "Cherriess (Fresh)", + "classifierURL": "https://www.gs1.org/gpc/10005953" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "characteristic": { + "variety": "Tuber melanosporum", + "grade": "Extra", + "aroma": "Intense, earthy", + "flavor": "Rich, complex" + }, + "manufacturer": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-5678", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/5678/binding" + } + } + ], + "name": "Cherries Orchard", + "location": "https://Cherriesfarm.example.org/locations/perigord_orchard", + "operatedBy": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + } + } + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/linkResolver", + "destinationPath": "/traceabilityInformation/0/eventReference" + } + ], + "dummyFields": [ + { + "path": "/traceabilityInformation/0/eventType", + "data": "transaction" + } + ], + "generationFields": [] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Agriculture

Business identifier
75 859 224 235
Location
Rooty Hill, NSW
Identity verification
75 859 224 235
Other evidence

Conformity credentials

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Harvest Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Cherries Product Passport", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/productIdentifier/0/identifierValue" + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "CherriesFarm_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Move to Next Facility", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "CherriesFarm_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Farm", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "CherriesFarm_dpps", "keyPath": "/epcList/index/name" } + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "packhouse_facility_transaction_event", + "objectKeyPath": "/vc/credentialSubject/eventID" + } + ] + } + ] + } + ] + }, + { + "name": "Fumigation and Freight Forwarding Facility", + "type": "producer", + "assets": { + "logo": "Cherries-farm-logo.webp", + "brandTitle": "Fumigation and Freight Forwarding Facility" + }, + "styles": { + "primaryColor": "#b5651d", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "packhouse_facility_transaction_event", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "image": "data:image/jpg;base64,/9j/4QDKRXhpZgAATU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAAITAAMAAAABAAEAAIdpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABAAeQAAAHAAAABDAyMjGRAQAHAAAABAECAwCgAAAHAAAABDAxMDCgAQADAAAAAQABAACgAgAEAAAAAQAAAUCgAwAEAAAAAQAAAUCkBgADAAAAAQAAAAAAAAAAAAD/4QI5aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOklwdGM0eG1wRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmFlMGE5OTI4LWJkZTUtNDUzNi1iZTllLWNlZTAzOWQ1NWZlODwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/bAIQAAQEBAQEBAgEBAgMCAgIDBAMDAwMEBgQEBAQEBgcGBgYGBgYHBwcHBwcHBwgICAgICAkJCQkJCwsLCwsLCwsLCwECAgIDAwMFAwMFCwgGCAsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/90ABAAU/8AAEQgBQAFAAwEiAAIRAQMRAf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/j1fR5OpFIujuvava38POONtUJNBlHRa8tVEepyeR5dHYFBtxSm0bsK9GbRJc/dph0Rx1FNTHyHnP2Rum2mrYc9MV6R/Y5H8NI2kkDlaOYXKcDFp7Fqv/wBl+orso9OCdqsraL0ouFjiF05Y+cVKqeWvTArs3sgO1Z81mh4WkFzmxKW47VfhX5R61N/Z+3oKv2ljIWzQAyKzaQcVL/Zb11tlp5wCwroItLMmMLU8w+U8y/s1xjApRayxjOMV7DB4Umm6JgVcPgS5bonFNBY8ms45GYZFd9pkJKgDrXRQ+C5ojyuK6aw8NiEgvimPYq6bptycFc120Gm3Xk4rV06C1t0AOK623Fu6YXFNEuJ4TrmgXE5KyE1z1r8PZbl9wXNfRVzpEcrbq6HR9PggABAouibHiukfDA8Flr1vQfAP2IhlWvTbP7GmMAV09pPabcLipbHYpaFp32bahr0uzhUqABXEm8trc7uK17TxJbKANwpXGdf9j9qGthtxiseLxNbEY3Cr669aOOopgRmIp2pDFvIqGfVrU9xUUGsW4bgihgaUGnnO7Fb0NuYx0xWda6tbHHNbkd/AwCnFIEieCQLwa1RdlU4rEkngUZyKxJNYjU7c1VkFzavrpWzurhNQiSYmr02oLKeDVX92/WgTOPn0Nrp9obinwfDi4vCNoNd1ZwQCTqK9U8P3FlCV34oCx4UPgpLcJ80fX2rltV+AciguI+ntX6H6Jc6TJGAdordvLLR54ui0KQuVn//Q/nhn0C2Q9BVB9CtmHAFdFq12ImIXmuYfVcHArwFGR794lOfQYR90Vzl5YRwcGuq/tLccY/Ksi/8A3oziqSfUV0csYYc4xSvZxMvyjFaC2byMMA1v2Whzy4ytMLI4ZrDHQVSfT3Q/KMV7CPDhC/drHutHaI4xTUxezPLJbCbBqGPTpyeRXpSaQZGxVw6PBEuT2p+0JVI4O00ESkbhXWWnhVF5AxV2OW2tjt9K34dVgVMCpc2UqaMqLQ0iOcV1Om6fCMblxWO+qp/DTU1lkPy0cwOCPXdOsLfjAFdKLO3CDgV4lH4rlhGAacfHk6jBNXzEcp6ffxQRrniuIvbsRH5a5K68ayTjGa52XWpJmOTRzhynUS61JE+Aa39J8QuMAtXl/nO9TxXLwkGmhNH0PbauroOa0E1fYPlOK8LstbnXA7V0i6u5TJxWhm2j1RNbfOAa6Wz1WXYMtXgi62UOeOK1YfFrgDGKGhXPa7nU2K/erm5tbuYvu9q4mLxGZupqz/aCSLgmlYaR0A8X3MZ+c1ow+PXQdcVwrQebylQPp0x6CnoFj0tfHMsnepE8WXZ+Za8yis5kOfStiElFCmiw0j0i08Z3kbDPFdjaeOpMZY14pGucVd2DGKVh2PY7v4hhVxurnD45d3715m8ZzgVZtrQlqEgserQeLHYZBq7H4nkzzXn0dmqKMGopWmh+4ahi5T1yPxUqgfNira+O2g+41eCXN3d49Kz4r6cS4ZuKLhyn1HYfFm7tDw5ruLT4zTyIFLmvl7TWt5UG85ro1ht1X5GxS5h2P//R/n11LTXLlq559LBOMV6pf2rbs7a5ySIg4214lmewcvBpKk/MKvjQ0l4xWxGrdMVq2gVmGaGho52DQI0fOK6/TNIjyBtrajtUKjilcGBflrFps3jJIW7sraCHPHSvLddmgiJC44roNa1eSGMgnpXi+qXV9eSnbwKIU2OVRC3etCDO2sabxCzJjNZ8ulXshyaoPo9yBk8VuuVGT5ugyXVppZPkrZs57hwM1zCQiGTDdq9X8L+G7/VYxJbwsy+uOKuy6IjmaM2GOZ60UtJe4r0/QvBU97dfZSuzbyc12erfD21sbbKE7sd6nlFzHgw00yD0qu+hyyHCiu1jENvOYGxleK6Kyjs5WxWTmkbRp3PGZ/Dlwg4FZgsZYH2utfTX9j20qfLiuO1TQoFJI4qY1Ey3SaPKo129sVMdrV0sljCp24qlLZoBxWykjFxZlI/ltV19QVUqA2ZzxUM1swXge2K0TRm4laXUGJ+WmRXU2ckUttpl7d3KWdpEzyucKoHJr7h+F37KC3+hjxB46YoXGVgU4CjtmhzUdwjSlLZHxpBNIeldloWka9q2WsIyyr1Y8CvQfFHhLwzpuszWFjOpihOOPau2+H/xB8I6BolzG2yWPB5bquKydWNrnQsM07M8U/tn+zJzZ3hAdODW3F4lssfMRzXh/i64m8X+JbrVPDABRnPyjgcV9GeC/g94X8QeDra7udRMN/KE3AtjDHgrj2pLXqU6aRFY3EOry+RYKZZPRRVW6K21wbWb93IvVTwRXe2XwF+IvhG+bxD8Oj/aluiHzt54XH93H8q+a/E9/q194pbU9XY28isEeNf4cVV5W0BUoHqZklh6Go31GcfdNeY674nsbGe3g0SZpzJwVPJH5V6PoUD3Fuj6xGYQ3QkYqudrdGbpdhU1G5Y8Cr0etT24+YVbNtYwzeVEwbNaH9nROmRV6Mxem5iyeMvLXBNU/wDhMEfjcKpa1pMRyCuK4C50eQNmB8UvZi5z0p/FCY5Irn7nxMgOVrixpV8xxvpToGouOCafIHOjt7Lxx5TAE4xXURePAy4D14fc6Hq0C79mRWE9xcQHY4K0vZgpo//S/Ji78Kxun3a5O58G56CvSx4ls34BFaFpdWtx0714TlY9tRPEn8GMBytU18NmB8lele+3CQbcKBXKX1uDnYOlSqhXIcIlpHEuCahmt7dk5Iqrrv2uAkoOK4F9UvEYqc1ROgzXdNhkYkGuFksoI2xXTXVzPPxWV/Z1xK+QKGVEynSCNDgZriNb1GOBSqrzXs1p4fLL84qhqvguC5UnZWHOkzp5G46HyvHcy3WqIr/KhYAmv0I8Ai0i0yJUAwqCvl278DeVJuij4HpXVaRruraDCLON8BeBmuqOIjaxzSw0tz6I1jxFpei6koYgSSDnHHArifGHxJ0mx06Sd5Afl4AryW6tdT1uc3c0hZmrmNR8AXl9/rCWHpTVREOk0ebzeP5Zbt7pzjcc1r6b8S0SQZetxvhRIU4X9K4zUvhVeQPuQEUpQgylOSPYbP4oweXjeOlZeqfEaB1+Rq8pg+H+or8uTWtB8PbuTAbNZqjFGjrNq1jXj8cRyP8AerprHWftvC81l6b8MGZgWFeu+H/h04kWCBMsap26EK7I/DPhDW/FU/k6RA0nIBKjPJ7V3cnw31XwneINZiKl8gBlIxt49K/Rf9mibwd4C8NJqWuWqG4t5BIwYBcgfX+lbnxu8TeBfi5plv4vsbb7PHZeZ1XBZMd/pjj2qak1CLZrSo80kj598F6N8I/BWlRX6ot3qEgUjA3SM3oPT6Disnx/4h8XarcGw1VzpGmldxiRvmYY7n+g4r5l1bxrJFqsmp+Awqm1bC+Z0bHPFfVHgLw34e/aT8FLrPi3VvsMsIwwVthyO1c1aSp2nU1/T5HZSXMnCGhc1H4D+C/iz4QtV+GoWAq6brlc5IA+fdnua7aw/wCCZej+MPhTqzeFX8y7sY2aWXzSnzY3ADHFfK/xm+J/jj4Q2qeCPhPqKJZRowMjLksVwMKR/OpP2dv2nP2gNC0jUdE8U6+9vpOoxYdIlAYuOnzduKr2tb2kak2lDsR7Kl7JwgrzPiH4KN4f034i/wDCFajdbIJpzF57cfdbaa+/vj5YeF/C2jWHh7wPcxXXmplmBG9FHuPWvzI8S+FdQh8b3X/CNRkW4mdrcy9dnXk1veHdat7iaceI55IbyH5VQE44rpnFvWDRlCUVpJH7QfAf9pHwTZ+B/wDhA/EES2V0ybRIecnpxXwn+0X8KNR0TVpPE2hSLcWtyxYlevPtXyoNWvvFuoxaKbptNkYja0nykds10/ir4jeLfA3/ABRGu6iNTQqCkvYKeOfTFc8MNVi/iN5V6bVlE+1v2I/h/wDDT4g2Gt3PiaaGG+iG1EbG5dv16Z/lXiXxktfHnh3WrvS7u3V9NhkYRyx55UHivGrKH4h/CEJ428JSHUYbwbp0QY28cEY7V9o2nxg8B3Xw40vxR4zu4nuLnYs9sSNy7uox14rZupD3bXiYKNOWt9ex8j+H/EemyxH7RcGJ07t0Ir0bw14rt766a0VgVXv2xXvHjz4F+APGHh6PxN8MpI8MNzxDHPHTFfLnijwvYeHbZTpayQXUXDDsacKtOS91kzoSvaSPZtQ02C/tiYiCcV8++I7xtDnKy5C17h8HdZ0PVY5o/GUnkmIDy8naprn/ABjZeF/E11cWumSCVEYqrjHOK2hUTRy1KLi9jxK28aWZcDetej6L4gtLjAyD9K8G8S/D6ewlMkHSuRtH1TS5h5MhXHbNaWMD7pjS0vIgMA1zWq+DdPugXUYryHwv471OLEV38w9a9htfF9rcxgPxRcfKf//T/non8ZanpNwBfo8QPTI4r1bwt4/jm2hnzWZ8dPD9vZ6HcX0w2iMcdBXyR4R8R3FrdKkhI5715E6a6HrxqaH6XWerpexgqc1qIUxhq4r4OaFrfi+NJLOL90P4jwte6+IvCMug24F6oHHUdKxlSaVzWNVbHk2qWFvNGeBiuJsfh/q3irVF0vw9atcTv0VR/nFd7bQHVr5bSE/Lnk+gr7P+Efgzxz4PsZfHWm+Hbu40mGJS9ysRx68Hv9RRSg2/IcnpofE2tfs/eJvBccN54xjW3hkPGDXY6P4K8EyaDLcZjdgBgr2rgP2vv2pb/wATXX9hWdu8Fug+VsY3nGOO/Wvl34f6/wCNNdNr4etbjDXLCMH03H+laO21ioxtY9hs77Rb7xXcaRbNujhbAxWR4+1Gz0ARzWjgoTgjNfQvxE/Z00b4Q/DSfxnDeZvYU813z949+PevzR8S+IvFV5i+11WWFunGMVz+wSb0Or290rH15ceLPBsHh3E4XcVyGGOK+PNW8ZSarqPlWQ43YB7VQgWC9gxJIRH6ZrBur/SdGnxAKiKg57FvmjA958I6jIhEVyQWOMV7hp08U0fmGIlF6nHA/wAK+bPhEIfEt9NPcsP9HwNuccGv0U8KXvgaw8Mpp2pPGhRPm3d/bp1rrWHXVnFKvbRI8d/4l/l7toxXLaoumyHgAV7O3gSx1qynubFxDuyY/TH+FfKnij7fo2oPZTk5Q4I9xWEqMkUqsWb7RWKHHFS2/wBhz0FeVtrExPJNbGn6k8rgevalyMfOj16xMDuEhUEmvqz4c/Bnx/q2kyeJvDelyalb2+15/LHRfT6kenavpr9if9jPwr8cvh1qOt+JtQOmyW6AY2jJLDr7KK97+BmtfEb4K2XiD4XeFtI/4SEwXkiRFAQCYjtzuAI2lQD/ACrpp4fZsydbR2PNvEnhu2/aJ8FWMPw00vy7azkje4uWiwII4/vpkdSemB0x+FeIfGzwDYeKymk+D9UjtLOxTF8Ijw2O3tgDrX7RP42+Gv7GX7INze6rHHPr+skzNb4VSbu9cnYPQbm5HpX8s37TXiHxP4D8P3Mul3k9zJq7vLdJb8DEhy49Qo6D2q/aRfu2uJQktb2M+ys/Dev6+0XghG1FYAUKwDdvPsBXy14v1650vXZZVku9PsI5ilzBC7RNhTgggY6HrX6Cf8E9PjH4W+GSR+L5tBN/L5UiyQKmT838Qz0x0+lfHP7R3jTU/wBoH9oTxV4j8N6Wuhreyxv9jcqNqxoE3ELxlwoPFZwpQcnJ6v8AA2lVkoqK0R9l6Z+y3L4r/Zwi/aTu9ai+xWkTSxWMmN4iHHXruPBr5qN9YwKVilXy19OleUaxofxqHwKunGqmDQ7XdvtA5UlI+pGPlx7Y5r5p8G6/4yEtxpOlxS3qPHl8AsUX1+lY4rBOrJNaGuFxipQakfoHpXwvvfiv4P1DxH4W1G3gezLRjd1LKBn6e1fKXxK+G/iv4S3FrfXUy6hHK253UfMpPrX2l8I4LTQfhpaabphB8wZlYdd3U5/Gn+LNKtfFOlS6XcqDuGAfSuCOLjRl7Ll0R3SwjqQ9pfV9D4ev/CnjfxDZDxvNAjWVouSoOGwPatPWfhr4nj8FD4smBRZkAmKQ/PtHt/Src+iePPDXiqx8KS3bPp11MqsCcJt9DXsfxck0WKKLQr29cafAqmW2jb5G444Hb2r1VXhppued7GWvkfOvhT4meKrG1e3sFRrXq0fXH0rib6HW/FmuNf6PbP8AKeUAwPyrr28XeHvDV4ZPDukO0Lkcsvy4Fe8+EdQ8JeMoPtehSLZ3yD5kHHP0rOtXVLVrQ0o0faaLc8c8IfEX4j/DC8VpfPt7fgbHzsP09K9b8R/GZPEenbJ7cCaYcMPWsn4kWHi6+03+z7uJZlB++FxgCvm4NcRExsxwhx9KzcKNT34I0UqlP3JH018MNI8b+MZriz062a5jiHPl84zXJahba/4K1+WJCwy3KHjH4VpfAX44eLvhDr09xo6R3UF0m145eOnTBFa2teIk8Wa7d+ItckVbi8kMhjT7oJ7ChLdJA9d9j13wvpM/jPRRNLHniuc1r4OM5MkIrG8I/EjWPC832SJBJbjj8K91svGdte2gkY9fWt6c5bM4cRRS1R87xeAdQ018AcelbNvoVxHw6Y+lejan4gtHc8gfpXMPradiCK30OQ//1PzN8W/B7VfHFuEvU/dDnAFfK/jT9nc6G/mwx7Stfp14E+Jehapp6K5XkVy/xJn0e/t28kA5Havl1Wnzan0zow5dDyH4H6xY+GNCjslYZjA+U+oFRfGb4lRXtnHpGmYe5uGCKq9RXi+tC7s2f7C5jz6cV+mH/BOX/gndrX7SfjPTfEXilpIrG5YSGU8Yj3YGPdv5V69BOu+VHl1XGj7zPTv+CaH/AAT38X/tNeNrSTVbd00SGRWvrhhgFRyUX+XtX9jHxd+G3wE+CPwDudEuLW1tLaztPLRSFGQq46V6p8EvgB4I/Zk+GI8L+C7aK2itIeqjGSB3r+Rb/grd+0L+0n488c6x8OPDl5/Z2kRDb53mYaQ+gHbiniZumvYUVvu/6/AWGiqsva1XZLofztfHXQNP+L37Suv+FvBMZOj2eozskijgITkL0xgZwPavqj4e/s1eDvD32e+Epju4mBG48Vu/sr2fgzwj4N1K48VeWdQSV/tob7xJHGPXjFfB3j39p680P4k6jBZyP5UMjRxBSSNpPGR64xmsK1NqnyQ37nZRmpVOeXw9j9fNZ0HwPJ4YceO79J4YxkRORswB6V+Cn7VXxS8K+I/Fl34Z+HCxtaIVRpo/uZXqBVn4p/FD4gfE3T/s0V7LFalcFVOM5+lfIr+GtV0dgo5A9q5ML7RaVZfI7MRGm7eygeiaR5zWqmZ/TiuU8WeXJMqxncQQfYCsR/ENxp6+S3UUzTLq41278vZlfWt6cJpmVScHFHY+FvFdx4dulubCQxTAY46EHsa+j9B8e6/qw8u5UeXtBbnkV82XXhFbYLOGwcAj2qSX4g6hoUiGzUZPyMD93nitYRinuY1G7KyPtnw98UfFPh3/AIlbtugblM9vXFc/4m1g6vd/bJTln4NfP/8Awlt/Pp6ajcv88Y4x0rl9E+IU+r6r5CA9enpWk6emhgp2PoA2m45xxXqnwa8Ht4t+Iul6BsLCadQQPqP0ry7T7nfCA3Wv0T/4JmeCrXx9+1z4V0e7XdbpcCWX2VORn2zjisqcLySHOVo3P6aP+GCdE0v4beHfD3hq+m0e71MQxSyW7mN5PMHTjH4DtX3N+1f8DPhv+w7+ypceM/h3on2nUbC3TcYx+9kPG4se57kmvoz9pvR/BHwesvBnxG1O5Edhpt1E0jEgKu8BVPpjJAr8ff8Agrv/AMFStA8S6PY/s6/Cpra7OrDdfXBdW8qFR2Hq3Qelb18QqcZKX4GeHoOrKDjsfzX/ABO+Pes/Fr4nLr/x1lW1ieYzWtmpbyom4AA6c4HUjjNeR/tdfFP4f6zp+meEPh5biKd/leTb0TAAUZ7nNfW7+Afg94rv5fGPxV8sRWEG+HcdqK39704HQV+I3xK1iw1fxFd+OtOkdLJbuQWGTjbArYQ/iMGuHD4hVqd1oejXoeyqeR+337HH7G/ia8+DeoeOzc29nbWkLEb+Wc7cnHYcV+SXiHwpp1x8TtS8c6LqDXdvcznbLGflZewAHGBjFfSlz+1Ynwr+HOneHLy+1CaPUofLktYXIWTjn5R0HNfFWp+ORfWWs+ONBdLOzs8CPTCuJPl68Du2eBihYeaptR+Jgq9NzTl8KOt8caLqmt6R/YVpdypbTNkwhvlY/Sub8Laj/wAIb4nfS9Dhjspvs22VpAG8zHTH071lW/jq417QYb/Rx5l0/IiT7y4/wrifB/gzxT4/vr3xXd3ximsXKCI8fd7EUsOp04P2uhVfkqSSp6nt3w20P4tXFwNSZ1sNEuZm8yR2+5knkL0xmtK5+LF94d8bT+CbS6ivIlYAXZ6DI5Bx3FbPjjxfceEvhVFFctu84bdingn6V8QadZa9rkxnjtZPJB6otTCnTrRcpQRpKpOk1GMumx92a9odl8b7eTR9CmaN9OI3zxnGW9BivG/HvwX1fwfNZ61fyy3dqCPtCkliwqh+z38T3+F/iO50HVrdhp90/EhH3GPXNfojqh8N67o4uppUkgYZHIxXFXxFShV5Le70OujQhWp81/ePl/Sda+G2reDX024eJFRNu0gAjivkLw1ZLqfxRXQvCUjZG5lMXcD1r6pOn+BNY8QXfgyYQw2sw3PMMDHtXjXw8fw74P8AjBBBaSKkMU5jWb+8tdlKHLSlUTv5HLUnepGna1j1bw5efEC7udT0i4sZbl7JCGG3kDFcXqvwd8W2nw1T4nNZmKwvpRgngjecAkV+pnh0WPgd77xjp3lS/aYfmD9DxxX5teJ/jB8RPHWsyfCiKRItINwZfLAAAAbcAD6A9KWEnTlFyirf8MViYzjJKTPn0aVdaVexKz4MmAPxr1i48J3OiaZHf3v7yR8EcVW8a6I+mxDdyYGADY4yK0tO8WXGrNa2Wt/JHwAe1ZynPR2NYwi9D3Pwj8MNettFbUfFlkbaKcAwkkdMdD6V5uhEeoy6crlQjYFez+KNf8favo9tJaS+dYWS7mVQBnA7+uK+ena71zUn1XT1wg+92opz15uhnUpXjy9UampW1xGPv5xXDXOoXkTlQTxVy+1m7BMMg5HFc/I0lw248V6Mdjx5aaH/1f53/hj8W9W06NIrpyCK+oLL4kprEAWWTPFch8NvgfpE1iNW1SDe5ztB6YHTiqnxJ8OWXhQLqOn4hBYAoOnNeROircx60Kr+E+hfhJ8OJ/jJ8QdO8HW8qxJcyKJHPZMjt6noK/0Cv2Bv2NfBX7Pvw10/UEP2y+ngT5iBtTA6ADjjpX8Ff/BOHwJ8R/jh+014c8B/Dfi9ll855GGUjjixlj/Sv9I/4K+A/Enw88F2fh3xFqf9oPDEq/cChD3wfSvUwkHCje255uLmp1uW+y2Mv9oG81yXwLL4Z8Lc6jqIKR+iqvVj/Kv4c/8Agp34e+LOgeNrrW7jy1vTi3+xuDgAZPmZA78fhX9xHxA+JnhH4d+Ipz4pnQvJah4lOMoo4wB7mv4Kv+Cw37XLXf7Req3GjATvc2oFvABuCBSQCf7o71y4hwuu514RSaa6H4VWfxA+LOleJtS0O6KyXck2CVyBk9OB2xWn4u/ZX8eDw3J4+1SRB5h86T5eST1P+e1cn8LZ9V1TxI+ua2xkl3+ZI7etfRvx8/aR13VfBX/CD+GAgklQRs4/gXvx61wSrtPRHqwoJ7nyrpJW0sTYsQWi44qhNaW17JiQAivGJbvxDoMJ35fP50um/EMD5Ljhx61y1MO2+aB1U68VFRkbvjbwvplvamdMA4zW14Vn8FWnhXzAVEwX8a8z1XX38Rz/AGKN/lPFdPpXw9hntgS1dMLxjyyZzzs5c0UYWpeJ3lVkj5Xt9K8z1a4mmXzSeBXZ+JbKPQpvIjHPt6V59Z6T4p8V6yvh7wvYz6jdzhmWC1QySFYxljgdgOpOAOPauuFLZxOSdbpIpT+N7y3szZZJBGAPauz+Gmn61fXT6nHHtjJHzY4rs/hr+yD+0B8a1lPgTwxe3cFtu864ELi3jKLuKGUgRh9vOzduAwcYxXrPwh8NXcWmy6ZI6NPaZG0naWx1x9Olac8EtzndOpJ2SNfSdY8wC3b5XXgiv0S/4J1fEqH4eftLaHqF0/ki7mS1WUttCmQ8c+9fL3wC+Efw48W6z4g1n44+I08NM1kP7BskcGW/1B38uOIDByWO0BRyS1fWmk/A6L4Z/Fq3+E3xPsLTwx4ptmt3nsL66C3VqZFDxuQCykHqpUkHGO3HLWqKlaVtPI6aNB1Pd2aP6fv+ConxR8V3/wAB9OstVlMmiyFI3O75gIl3IcDsSPwr+NjWbvT9S16fWdGuJIpby5Lh5GLELnheT09B2r9X/j58Yv2krvSh8P8A4p6Nc+IvCGmzfYpNQ011PnDyhIu4A5zs7jjPFfCa/Dv4I/tKfFuDWPgrps/hXTdOsoXudHMvnyXtyG2KIkUkhpG6gdTjii3Oktv8i0uT5dj0DwWbz4i22oeEfGhey0m1towLtsBJZX3Dbk8fLjn6ivzo8cf8IzqrDwvpnMFrOypIvAdEJAb6HGR7V+pn7TnjDwb8OvgNrH7OWv6dLoniqIG1u7S7Ty7m383aw3A9wrBh6jFfBPxS+Bdj4E8Iaf4x8MakmpwzIpkCEEqD0PFcj5IR5aStqdcVOT5qmunyO/8A2cv2ePGXxq1k6fbW/wBq0+wUfabt8DyUYcAcdTivjb9pKw8JfDX4tajpPhlheW9uqRlxyGk53D/gPAr2H4WfG74p/D+K90fwNqk1jFqqhJxEASQBgYyODXx/40lW28WiS9zLBBcDzzJy3zdSc89ea6MLWlJcrWxhWoxi+ZfcYmi3vjDQ7k+MdGiMaE/MoHG0+1fYHwg+Avibxl4J1b4pQXzW81wS62athpCB1I7Zx09Kq6unhceGg2mvGUkj4UfSsz4GfGjQvBk02h6lcyxSOWA3N8mOnHap+stwl7pSw6jOOp4f4l8QeJvEPiSz8HXkMvl2suxokG9tw9h2r78+GOi+GtK8MiGfHnDgo4wQfQiviH4geIb/AMKfFGz8a+D2QNcSjaWG4Hdx09K/RDwf8IZ75F8Z+KpzJdXpE5VDhB+FY41r2UUtDfCJ+1k3qeY+PPBOl3mjzNFboJJPbFfP/wAPNTv9A8Xnw54mnkuLLbiCAHOT6V9aeP8AxZ4e06G5tr+RY5YxhFHevlD4epqj67eePYdO+221k4Kq3DBh6Z4owiclaSDFNRfu6HofifwN4f1fxHFewQXGjGRNk0Q4Hsx/+tXnU/grwlo2qefeOZTp7B0LdHx64r12y8Uaz4o8Xpf+J42jmjYMLVcFTEOmTXb6lenwvYyeOBDa3EFxOqCz4yo4HX179K9G62OCzSPOLn4mfEHxPpzaVpFs0dkEHIPOB7V5XJ8OvEdzZSeOC72EsZIjVhjeB1z/AEr2PWD4h0DxcdUkAtLbVYwYIlxtBxXNeMLn4jQWUUOtIGsM5jYDHPaso0oRb5UbOrOSV2dBa/Fa88RfC1vhdL4dEs0OC94uDgA5z65rhtZ0OzvPD8VxH8nl456EYrzu18Za54ZNydOl2m4+UgjNdX4WvL3W9CmsJwSVHBrjxcWlF9jsw1tUe3+Hz4iv/DDroM4NuqfOMZ7dqvfC/Q5b7T7m2MfzJnNZX7PTtHdXPhebcyyZPPau2XxJB8MPFsmkuMpcnj2zXm1pyk5U102PQpQjFKb6niuu6GkepzWmMMprHHh647JXp/iQWs/iI6tGwxL2rbtBaPgcdK9ijJ8qR4GJjaeh/9b83DqC+FrF41QPEBwvpXyB8VL7W/G2pxgDy7eD7q+pr3671SbU12SdPasg+H4pFLla8BVZLRnveyjbQ/YT/ggr4z8FfBH4g3vjDxBsOpzHZ82AVgXgAfU81/Z3N+2P8E7Xw1J4glvW/dIWaILk5A6ZHFfwY/sM/DA3vxBtLq/mMENw3y444X1r+ohvDHws8OeBYrDXpYo4ZBhl3dSa9VV5OC8tDzJYeKm33Pz6+NX7bPin9oH9oi8t9ET7K+r3SaZp8LZcRwxnYGwOMnlq7L4y/wDBFrwB4g8Jy/FD4giVtVmUSPLK2Xfj6YAHZRwK8A8W/HL9lr4JftZeG9e07y7l9PczyLBiTaFwOQOnfFcZ/wAFj/8Agv1/b/gCL4D/ALKUDafeahF/puuzgAwRdClvGesh6ZYbVHPJ+WsYqEKXNvJv8DocpzqqC92CX9fofzNftF6f4Z+Anxv8Q/C7QLhZ1sZVxt5wJFztJ6ZFfP32iG4ZryXG6U7j+NfOPirU9U1LVrjXbu5lubu5kMs00jFnkduSzE8k1xMvxC1i2PkM3SuOdD2iXKehCtybn1Tq39myRHz9uMV8v+MvsEF4WtMfhTIPE+p6w2wvgHtXTWfhBdRO+bmnSpezerCrNTWiPK9L186derK3QV71ZfFawt7ZYk5c8BR1zS6J8BPFHi/7bceF9PkuoNNh8+8mGFht4v7zucBRxwOvtgV+i37Hf/BOvR/GfwHm/bB8U3dhq8EOr3OkaL4cZJ0kvJ7X5GnWZAUeQTfu7e1VWaV9pHzFVHTOEJJyfRHNGpNNRXXQ+C7v4f8Ai7W9W0QeIbC7t01yRfKhghaW8aLI3FIQCS2Oi4+or9L/AAV+w1q/wgtYPEepaxL4JXUY5YZZtSMa6o1tIePIijOVzGBkEZ3HpxX0f41svib+yZ8Jfhn8ePHfhS88AXWu+GtPn8S+INcgkuNUe9vHnUW+i2c6xxxSokBN1G2EtwwkIcK615B8JPh1rHxG8Q2nxZ1jR7kW17MdRh1PXXN/rV75oxFEsucvH0xDDHHAJBlVrzcXiK9LSSUUvn/l/n5Wsd+FoUKnvRfM/uS/P8NOl09DufAHgD9p7xB8PYP2K/hD41tPC/w3XUp70as3nTmSXUDuczPH5UreXuKsAQFPcgVzHw7/AGEP2Ub341eJrS++On9g/D/wXPbWE2pX+j/2hqV5qGWW6RLayeNBbQhQ6ShX3owBAIJPuvjH9pHw38CL3xx4Z1c3N9450mGxi0nQ9Igkl1Cwu/M3TNqUvNrbQlCuYZCJJFBRTlvl/D7wT4qh8Z/GSK+n1qbw1Yale3d/e3+l2iq9qlwklw6QWodoxGZNsMUZ3KiMucharL6tao3KcVZ7af1t22+6wsdTp01y05O67W/Kx+m2jn4c/Cr48eMfAHhK+h+JHhjRJPK0/wAT6Vp902myWQjjmN2XSOU28cTP5M284jlRhv4r6R/aQ/ap8D+N/gjpfjPxL4b1mX4qtqstpLdT29pPaX9rcL5WlRQOcXEiJJtSRX8tlLFsYIavxktf2h/il4Fknb4b6jeKsiG3udR+z3Nmmoxjl1uoCVYROW2NCXZSFBJGQK8S+IXxW8U/ECS1vvEltp1lbaezXJTSbaS2tFeTaglkjEr5MajCONpC5HeupRc04zWnb+tjDSMoyh/X9elj9f8A4D+If29PDHivxW3jrwc+iroc9nbXFvqLf2aUnvnaKOO08wPb3Tjbl9knyp0JPyjyY6zq17dy/FjwxA+k6rpl7FereCJYJbe6EuYnyMgESJxkbcjpivmT9nzwn+1X+1P8StK+D/gDWJL+7tLC/wBSt5NW1KW3tNP0yxQzTXVw8xmQQwdQ3lsylsBDuZqi+CkPw3+INxaWHxE8YNpEkqNPBlltYrm2OGGXxuUnfkK4HykYHWubF4OMIqcU0vJv8jpwmKlOTpys35pf1/kfQfxp8W/FX9ojVH1z40ao2oazcSrLfak8Si8uGAUF5AqqpfaAF2qqhQAFxXjGnfDeG6S90nU9ek0HTFSX7PfFDLFJIP8AVpIvRN34fhXvfx4svgvqHw/t9Q8I6qt1q11PC+n31mzSPIZABiab/ngYsmKMlQzfMMgV5h+zN4al8TeORqXxegC6HZG90i7a7upLeK01Frdp7W4uETmWEGPy1UqVZnAPSs8O6lRXlt5qxpWVOGkfwPlXULj4pfB6+hn1ewSUD5lmj+eFlx6jtivE77V73x/4vu9RvHSJ7khnH8PyjAr9N/il4l1yO2s9d03QdNsLGC3zc29kDsd9vLGI5Ve+QtfAXxw+HMOg6ja+LfB0WyzuwrukabUVyATt9jXThK8Wraf1+Rz4nDyWqOF1hNa0tUjgLCNOmDx+VR6YLW/gdrpf3mOvpXrWniz1bQ4fMXJZea8m1exOnTSWltkb+Rirp1uaXLaxM6XKr9DpLGym13TFdHaSW1b5A3bb0xX1PB+0V8RbXQoNBhtwGjj2BvpXy5a6vHpGmx3kPykABkrvLjxNot1pEV4k4V8c+orKsudxUo6GtH3E2mTXPjO41L/RdethPqlxcKEmY/c3Hj8BX3D8Tvh5qHwy+Ethp/2pEvNUMbvJENu4ZGR+X6V+d+gRR3Gvpq2pyN5atkN7V6Z41+JHjHxFLbW1/eSX2jWx8uJnwNjV0OLWkehg2r+8fbt94TtPCnhWPxb4VddSvEhH2hHIztx29PYVwXwisNK8T6hcaz4s06SXSwNyD+BH7jHHSteD4s+FLL4L2vhfwxbBNYYKs1zL6cZJP9K4b44zeJ/A3g/Tte8G38IsWQC5gjIJkLd/wPpRGKlaxMpON0z7L/aI8M/DjS/grpGs2zxpqcJVo8tzj0/EV+c+r/FDVtdv7bw3ZSq9ocJ844VjxX1v+zP4M0D43+GLbxL8Qbk3xtjiO3J/dx49BX0X8SPgP4An8KyweFNNiS4RcqwGDx71xSzKnz+zW60O2ngJ+z53sfL+j/sy+GNV0ASGQSXpAfePU+1cv4p+Flz8OvCkt3LIFm/h7Zr0z4b/ABQ8KeEp18I6rIYr1PldHPpWP8U3vvid4hisNKnDWduQ5C+o7V50q1T2rVT4T0FSh7NOG54v8GviHaeE9YWLxBaNFLc/dkI+U/Q1sfFI2114mj1pWEiSdAKv/FWJpZNK0vU7dIbaJlBdPvcdKz7Xwnbw+MbLMjS2rjgMcgGup0Yxl7aHbY51VlKKpSR0F/4b0A+FxqxbFwQNvzfpivPLGPVw4NurMB7V6D8Tp9M0zUbezscAAfNjpXR/DzV9Gtub/bhv4j0rspP3UeXXXvOx/9f8iLae2hAJrbGp2+zaK57VfD17YsA3T2pLSwaRAa+bkfRo+1/gj4q8SabJaajopVFjYDJ9Bj8q+9fjb4z8W6j8KDql/cNDE6iVtrHgIO1fk58P/Gep6JENKghEhi+ZTnHFdX+0d+0d4pg+FE3hiIbHuI/LU54GayxEqnKvZG+GjT5v3h4jo3iXSfGZvPE9lIyT2/mASk/MQOPy4r8k/ibqXiHxF481DVNUuJLk79qs5+6o6ADoBX078G/iND4d0i+0fWMl1ZgTjsa+XvFesxy6zc3VmA0ZckfSuijKaqvn2M6kYOkuTc5uO3tpLIvdjBArxPxBbq1/vjGFHftXset+K9MlsPsajJ9B2rzbxLq2nvaeVb4LtgD2r0oQSdzzp1HaxyVlqRsLpfQV9BeGfEtrNAqsfQV5L4T8Aaj4x1ew0DS9pu9SuIbWHeSFDzMEBYgEhRnLEDgCv2y+HH/BNyP4F65rPxm+Kuphvhf4TW0jfWp4QG1LUpeXtbKBctKF4XcP72ASQcOpGFuaWg6cpNqMTV/Y/wDid4e/ZCE/xF+Ivh2PxTqeu6ZeXOlaNdCW5srBYEw+rX1tbo7stonMaybYtzAs8fDrx/7Hn7RPjH9nH4X6Y/hnw7q2nQX3jXSz8Ptfv7i0aWDUZmltrgN9qn22vmK0csklraMHbzGaTaqGv7Bf2G/C37Cn7Nv/AATl0n/gorceHhpc3xYis47HRpb+5mhs/wDhLrmPT4dPBuGzJGZJB50jL5YRSUCxIuP5e/gv+y14U+Ifw21/41/8FFNQ0vwb8OPF18Lzw7oHhyzW2vNatdFkeGGHSQkjtb6JlmnAhUb2CTCTa4DKrL2Mbzeit+fTz7fIinas7QX9W/LuR/FSzu/2mP2vrX4PX3xfvfFng74beI9H0/UdQv8AVZ7yzkubxpoLy/Mkpkhiuby8i8iODcihZSYkCyNX2r4k/aY/Yh/Zs1Xxb8SPCOu6T4m8eaINVv8AT7Cx1B7y7S4t2ZI4mk/epaRq+BIwXcqllTJNfOviDW9Q/bL+Mutaf4N0LVPA3wgFvFcqPEenJYWsut6avl6XIkColzcg7zuRCM4VvMjcYPwr4K16L4nfEJdW/aQisvE8mj2+oar4wE8c+jGwvdUmU38N+LJY1vrl5vs0drbpCkdxJbm3YbUkavNdGliEpuduXW2i+9dPQ9GNStR/dqCbdlpe3y0/rseS+D/F/wARLnSND8IS+KNMuNW1TUNTv9X0VIZLG/vdXvrjzWnvMtsuy3It5VIWOJCjAMpr610j4beEviL4Eu/GK20Go6dp2spoV2yMsjR6ibb7Zs4UuFEQB835U3kIDv4HwHrHwD0zxJ4jXSPCsVpLbY8qNZZheXmoRs+5riWOBDGkgBG/GVwgAJ+8dzSv2lr7wP8As4Wv7NXwY8IQWt3pmr32pavr5mla61Mhx5aSQr5XlpaSDEIDuu1yQFd2apngqdbmlTlZ9Ladv6/4Y6I4qpS5Yzj7vX8fQ+o/FvwU8L65ZyWNrFd2rlSgdX27eMdCQD6/MD2rjNP+CfwV8BfEHw78VdZ0uy1uLRbiJrjwrDHIg1e1ETRTH5ZHke63HzlITypJVVXAU8eL/Cb4vftHfE7xTH8MotHsp9Qt0lkubrVrGe4aK2slDXLCKOWOKR1ztWJFZ2YoOh3D6t8KSaRpek3Ot2Ml1eLfy/aJZZnJkl4wuEBKoirjZFHhVHqcsfPc6+EklKWvbf8Apf1Y7Iwo4pe7HT7rHzh4s+OHwY0L4ralF4f8G3L+AkW50/SJ5mb+0YtKnJxaXSZzLKUAW5SRvmPyndyK9UufFX7LurafHqanw1+8eORY73ZbNvGCFlDqrKRj8CB6Vxnxa+FreNtSPiSNA1wytGJ1IjuSnXlwPnK/wCTIzx0rxjwZq8vwy0XVrLQ9C0TX7m9Mdm93rFqsrwG7k8pI5bWQjbv2FQN6oWJYdc11UoUcRaUG4vtcxm50LqcVJeljTv8Axba6J4WPw6t9bh1PTrO8TVLC8sWiktmSaExSec+A8kigBUX5o0GTwxFbP7M9r4VsPH/hrxB8a/G9h4W0jW9R+0RXMzPO8VtEHSM3cJ3rHDckERzMrYbAIHSvJ/iD4autE10vYuNU1Jmjm0/daxQW19u+abMQkZFjThY0yM/f4+6PAbLwtN9pims7lViS4xfwM486FXUt80LfvDwuAQMZ+XrxXqqOlpHmtrTl2P01+N0HiHwnNLovg2WzntLaaa3a7hBH2q3EjeXKPMUbCY9ow4wD3xXlE+meIZPDz6XemC+s9QtUVWA2iNyOh7B1/vD5T2ru7SW4sPC1jNpLR6pBa26QxiZmMc8QAGWK85xwfT04ryK58V2/gLSludHiWewvmmimtRIf9GuF+bbsddyrtPUHa2MjB4ryKV5xfKldHqztBpO9rHJ+ObSTwxqH2w6bHY2cKJCEh/iwPvn6+1eH3+o6OdehurhT5Z7Y9a+ufh1r3hzxLaR6L8V7Nrm3lVUtrgN+9gZhwTjhh0x7V8p+OvC9zDqL/Y5UeKG5aDzRxnHQ4rsppO/PozlqaJcuxR8Q2xiufLjTCS48tSMZzW4vw3ubTThJd/upmG7b25rH8dXc9/psKIR5tkFYuvotesafrQ1vQbfU0kMg2heaU6klTjYIwi5tHlFtPc3dudAmGJFOFIrrbrwjenRV0e7uGUfe2jpntXJ67qtnpHiC31bTsPJEwJQ9Divc5/Fvg3xP4NufEVxJ9j1SL/Vwno30+tW/aNLlJXIrqR5to99eNY3PhnUTu2jAcelWtINodAl06SV5/IUqgkYkfhn+le6/Dz4BeMr+GHxfq3lR2t2g+T+LBr0rWPgb4RsoPthysUQywXua5FjKUJWX4bHR9UqSjdng37L/AMf7n4P61N4X8Ur9nsbty4k6LzX6N6v8a7fxPoc58AzpMETJYtivyU8UWMPiZriy0hd32NyBxzgV7d+xz4YHjDxRPZ63ctHFbnBhDbQceooxNGgm8TLpuiqFWrZYePyPdvAfw6tfEsd34+8Tx5uJM7M9selZHw+1S40/UL7w5pFuZLmaRin0/wDrV7h8cPFul+CLH+zdL2pAg27RXyV4c8S67pWoP4v09djEfLu9K4Y81S86mz2Ox2haMOh7lYeCNc8TXE8niX5Xtj8qdea8n1KfxHpPigQ3edluf3f0r2zwd8VLS70mS+vmBuX5krJ1u/l8cYlsrPATq2McVthZTlVkre6YYrlhTTT1PItZvrjWLozXwOe1YryfZVxE5A9BXsM/h+BrYrMmxkFeR61Yy2NwGx8or0vZnke1TP/Q/I7WfGdrq7GK2YDb3rn4NUeJtiHrXxH4W8XeKpbjdNE+31r6v8KWGrajZJeyDGQCM8V4bo6Hu+2R7R4Y1BrO/S6Iyp4OfSvSfFvgBfiZph+w2j3Com792MkHtXz7b6lJZFrebgr6V+nH7HHxa+F1l4Xk0jxNJFDexOVffwWQ/dI9adKmtb9AnUatY/C/xbouk+CYLn+1ITHsZh8y4J9q+SWlsr1pfJG1SSQvoD2r9rf+Cinh/wABaxHrGt+DFRRORJGEGMsV5IHua/AOC71Lw7frcX6sEB/Cs8M/ap36G1e1K1upj+JVazv8Ou0e4rkb8xuA8fauy8Xa/Y646i2Xp3xisvTNGhvGRWOATj6CvQjaKOF+8fpJ/wAE6vhP4I+Imqy+LvFd99kfRrssXmkMVukMMasI8qCWlndtiLxwPrn+jn9n34UeD/8AgqTd/s8a78VdThtfgVb6/qWl6hoIf7HdatNbWVxeRGUebGFsMW0is43yT7dqx7GLjvf+Cb3wq+Av7Av/AARDvf25PHdqt7rOu6VLrfnugE32i/zHaaZbI/BeTeqBhgsTkYzXyj4/8afsoeLfhnpkvjH4eaUmg2Ogr4/1K+0MNp1hNeQRzS3cGkXiRIZZLaOKG3iWJoi8Ssrh0+VoqOP1i0teRq3bm/4HTs7PsKPN7D3NOZP1t5dv8rrQ+4P2z/2ofg1/wVPkvP2L/wBge20Pw38FPhNpE9nP4xl07y4v7WuLSXTtKs/D1ooj83yop2MLIYtyuGjdYwS/z3+xd44/Zl8d+OPG82mePdG1fULfSbO08L+FGuVvpPD3hnQ1XylhJG2OSSR2aa1hO61QpE+8Rqx434S/tcfsu/sn/st+J7/4Dap4d0yLxXNr3ime41OC6vdPsJJoYIADDKEOpTeaxgC284txdGaKPzfsxC/k54++E/wW02eD4oeFdA1T4G6td6LrWt6FHZ6i9/NGIGgislvAF2reTzfbJYbeDZEbIqqxr1q8fh1Vi1fpu+//AAFppbQywNWVOabXXRL+X089/Xsj9Ef23f2jJvgxon/CzdLn+zeIpjaWfhtLz5YLW/uy/kXUxKkRxWwjkny2OYht+7mvgXxRe/sxaTLqPwz+CEUuoaLpCxm71u4uY76XxFqJVWm1G5c8mWeYzFCkjxpF5YTBL4+c/wBov9m7W9H1PWL2X4la3qcY1ebRL4eJZ1me2XyIbm2V5EmZZbuXz2kEVspis4twkfzdyN8jeGdL8U654w1Xw74SuprN4ra4vBaWsTXEMdvawtKf3MQkdECdfKRirMpYbfmXzIZVyUfZc2v+X+X9bI9h5ipVVVcdErf1+H6bn0x4nihgilj8M3VzYWEj7pvKumiDvgYGQwbbgcpnae4r5h02GXxje2Hwf8CeEpL/AMYapqMj29xbz3D3t5AwzFGlqXEMYXa7vPjDRlt5RRuHLaF4e8e+JdIh8OaVaNcQ6zeRaZFHIYA32qVGdEbO6RT5at+8ClQF4YHg/p9+yg1/8BPGQkv9alvo/E0Fpa+K5UWIh47AO0aR3BUS7IpNpbBAmVFR1K/LWq5cLH3pavb+u39Il8+JdoR0X4f12/I8L8cfCD9or4N6DH4d8Z+K7WK6u4Vu5rXTtRDzWV1BIHgiMsgMUgB2szKVXeOPM2hqueCPjhawi38N+N4l0TUVCxyTR/vbF5cD5kkUsqBj93cQp6D0r3fx5f2Hi7xXql6xjc39xLOmOrRu2FJHpjFeBP8ABPw1YXX/AAkNiJLO5iO/MUrIuV9V3bTjtxj2ryp4inWXLWXpb+tj1YYeVF3pfcz6BvdYFraLcW2JYz3HBLf0H4V4x4r0uDXIrvUJbJz5cO658raVWPPHmEjbjPTP0FeDapH8SvB17DZeE9QaK2hikKxbV+yy4BIaTKlhjIDeXjAAwtfVfhXwd+yz40+HXibxnqUvivxAdCeOG1F5dQWHnTeTlriQRfu7a2kmb7Op2t5YG/cWYCtcLlrk7xmrGWJx8Yq0ou/ysfIPiG98N3htLXw/ZCzW3t7kXs9vBF9rnuJyUt4hujfciKpUZXknbxgGvt/w3oel3nwUg8PaGJYdO1qMXsy3JeS4e5IUt57PiVzwoZWP3RgAYr5FvNS8BS6Dp/h3whc21+/hJrq9vtVhmii/tT7VdgxfZdzqZo7VNiSbv3iKjlPk662lftQarofxG8RXvjIXFzb+INUZ57KXBvba4VI03KflU4RQu0ADYF79e7F4ep7NKk9V0/r8Dkw+Ip+0vNaNf8N+B6t8TdGtfhldXWofDZrm00K6jgJgv1W5CzsAsoDoCIVJy4fhecEDArw+Xwjq3jvxImmafo1/c6/dTlBpojQfaI0heUBXLKCSkbORkZQeuAfrR/G/h3ULX7do19b3cDFF8ssMgyEKFKnlWJ4CkcngV5h4sePwPdpr/hu9Xw9rOkzfa4HVWTEgQx7GXa3yurGMjadueOlcOHxLk/fhrtex21KKilyvRdDyifw5418J6LoniPUdOsxpOo2sOoaddWtxGY50iKCWPadsqSx71GJEB7c9R13xH8FaP8R10nWPCt1Gran5vz9EdlHOQOAwPGK9k0nxB8KPjp4dB1OCHTdYjT7JPGfLW4iaQD5c4IbfxgjnpXk9xZ6N4B1Z/hd5kmo6PqFrIryQ/NIgnYkSKU6tGRgkAcAd61jW5p35WpLdf1+BDpcsbXTT2fb+tj8/LW11JPFt1oGs70WEvE/plTivYPg/bSaleP4FEbzMXPkKvpXoniDRZ9atT4zuUhBkYQSeUMcoMK5HbcB+def2d9qvgPXIfGegMBcWvPsR6V0Sr3vFI5VQ5bNs9s8d/Au305UttRiNvMRn0rw+w8Pw2Pi7T/D3iIj7I0q4kPoK9gv/ANopfH9uup+IGAnHygDj2rynQfE0Op+O47/W4BLa2pJCt+lY0lVSansbVHT0cD9PtT+IPgbwt4ag0yC4GxIwF59q+dPFfxms/wCzZ4rZd8ODyK+ePGmu2HiB5ZbL93GvRM9AK8+0PUL7ULiTSYE3RyLtOe1ctHAQiuZs6quLctEj0fwlqVn9iaDTcC61CXJJ9DX0VD4MHwz0OTxTo5MF9KmS69zXy94S0WbTvF9lYXTARxtuBHtX1n49+I2kpYJpUrqyqMVGJ+NRp7PceHtyNy0tsfNWo6nrms6jDrPia7a5y24xHp+Ve0mK41Xw3/aVrD5cKj6dK4fRNIi8Z6mlppCAgnkjoK9I8QaF4m8OXltocMm60ONyitdKklFrVEX9nFy6HLeDvCV/d3JdN2GOT6V9o6IdH0fRvsboCWUYGOleb+Hp7S0hRCuxgMA1101xDMoAIz0zXoUafJqzxsTW57JbHHasTc3pkhHyelVp/AEuqwG5CZz2xXaHTo5SCn3q9U8PW5021Ek+CAOhFb7nLex//9H8X7Hwx4e0uxAjjVcCiy14WCtbwJwv3fSudn13TtSnVI5Bio9Rlit4d8bcYrx22eyoo0J2kuJTKx5aoYHuLK4E9s5Rx0I4rndM1sPKUk6V1bSRMAR1rB7mysO1We61638jUnMi46Ma+RPi38Kft1uz6XHnjsK+v1jDrxiqN5DC1qyMO1XCaRM4tn4r+IdFu9EuTZ3K7SDgVY0z7c1s0Fid08imOJfWR/lQfixAr6M+P/g+7ubz7TYxYwc8CvL/ANnTRtcu/wBoLwVooADXus21rGHA277jMSZzxwWH9O1dsLSRySfIf1RfGHxP+0x8VtS+Cf7IPiWyuPDfwp+GHhi11jRH0ue3lfUvFh8q1tGvSwYCKGeVQiKhwDvXeRhLP7OXjD9tz4ZfDzxl/wAE/wD42W8niS28KavPceF7+G0CCTVLyJ7e4WVYPLZ7OEXa6lNEzLK24Ro4+Xb9QfAPwP4D+HNx+yl+yt4G0u/vtd8U2beKfFmtyzyXgtZ/CN0ZZJI4J2YCO4vPKhjQbUhRt2MJXx94l8CeNNI/4Kkat438RRSJN4e8B6/feKbiCWW3tNfTTkiYSRTsreRLc3N3p/2ib7sU1sYyfLJrBYim5OMnZScvny63+VmumiWlkazoS5VKK1io/K+lvxX3+Z8Q/C34Pa7oXxa03xTb/ELS/HqfDPwXbaE1hYXqQQQ3xeS18PaRA8gQ3Mt5N51zIESMRrud7hIZdp9pj/ZM+J3x1+PXhrQP2gLn7Pbw/D3QPEHiq9lmje2gtUiurW6lSSLbb29vItmZYwoVdzswyXBPx98O/EPxv8Y6Tp3hqw0xrPwrpxtpbubw5pn2jU/tEdwLi4mQTPOA852RbZY3gS3hW2ijUM2/gP2mdd1j49fFia+vBqXgnwl4mWy0O/j1V5rKz0ixtfNNtJcWFoUjSGDe0ojdGWHYFAgDZXSpOFblhGWv/DjpQlR5pSVlt8tP8jyT9sr4wWfxz+Mfin4ufCzwhceFPAN7NZ6dp800M6xXFpYqYrO6mnlRPMvLyKNZ3dMcbVIOze1/4Tn4kaJ8F/Fvj86zd2EfkN4G0qCOPyiH1uP+0NTIZQH2paW8bZGDIZtuQDXunxxm/wCEm8UTeHLS3BsNC83SreaWJ1kmgtSY1nMbu+wzL84jyNikKfmHHz2/xD1LwF4HtPD0unPqvh2ybUNUtoUY28i6hffZ42uppU3JK8cUSQxW8uxdhIDOVCjnjiuZOMFr/X6HV9VUHFz29P66nyvaeFZ2sbzxpe26taaJJYpetDjdDFdTFYhyBtLPGQpHyqwUkdM+6y/tJ6brfja0Gu6d5dm8cbNdO5knWWLOW3ArEA5wpG0Af8CwPM/Eep6/rUlzazTyW0V5JHFf2MJeOGaS1AlRXWJgrhELSRl1JXqNrGub8OeHdX8VagdP8EwSalLHgzRyIsLfwhtrBjGx56OU4BY4xit50Y1YrnWpEKrpSfI9D9OtE1fSNYsk1bT+kkYCll2kgdvzqKJzdXckLODEeTuGNo9Aa+KfEHgH45fDPw4t7r+harY2d8POtJ5Y5HQqGKFiyb9g+UgCTYSQSOBVjSfiBd694U1rwdc6hZ6YbPdJcX2ZZptsUJ3qt0rMFQkLsRYsNKQTIq8V4sspmnoz145lTdrntvxDv9Pk068fTmRbW2gdXkONqEjjH+0duFHUngc18uW/ijxra63b+EvC0MNxeaswtoYI4VYuZwSc+Yv3lVuSNuwKGydoNe+fFrxRHceJltfFGgWkOi2SW8k7WcD6feNHFErLHDFPKDaeaNmVlPmbJGMQ8wDPzH4d11oPiDp3jdZZLKzsHBeKCdlZUnEsMUKS3GGlCriN3yQy5zyQK9PD4ZUo+67nm18R7RpNWR9S+GvhBqnjzU28SfF/U4rVA89rPawQAzSNafJ5nmxeTBGpfG1YwW2gMeCN3kHxN+G3gfwJrthpvhS4u7y7ktY/tlxfW8VtZqwi3SxW+AX3s6bkG4grx94gn7fg8Q+H/F2jw61oN2l1aTDeFh/hboQQehGMH6Y7V5Z4y0uPV/GWheDfDsU0mpyySSjymiMkCFdhlcSpIMckKdu5fvKQyiuGhmM5VOWcbL8rI7auBjGF4v0PKNV8c/EDQ/COm+DoRZW2m6TqH2u21NLMNdJeL+9h3HarqcbC6tHtYgMcDg8Rpt74o8a+IJWvZTf6k1uGYttVtkPLyNnaN3O5m6k9K+rvFXwG1zw14v07W9Wv5NffVbpI9Xk1JxsvJXPDTybDsTIyxxxtA6E1jf8ACD6JqHh2PSrbQNFs7zWLBEu4orKFMNBI0ZaN3OIssd3XhsHcMCut4mnUgnF6P9DFYedN2a2PMvDvifRLDT5bDxHYLfMlqRa3sYIureSNl8lo5g2PLXcyyIyncn3T8uKg0JdJg1Jta8SXmGub2JZ4QGRvJAbzJgVJ2Dfg7ASNpyScGvePF/wuOvXXi7xt8O4nhTwlo+leIvEOnxMfs9hLMhtjaqXWFZIlWNpFeMPJIS6jOct3WjfD/SPDuizRat5d0unv9tsrpoRH9mkCsCy7ADtZWwUYlTgcAVOJnGjFRk99v68h4ZSqXcVseOeL9c+GHhjwtH4AOi3Ju0kU3epeeGjkBffvAHYoVAXHXmvl34qf8I8+vQ6f4BkaWGdcFWPANehWGqTa3rdxceIrWKZHeRVjtYTbwGJVxEVjGdgCgfKDjdnFfFut+KNXW/LA+W8TMFx1GOKulDp2JrSt5G7p3hG9/wCEoOm37fZ0hIckdDXsdxaaFZSfupfmxgke1eL6b4j1O90l1vVzcMeZD3FTaDcO8hXUnzzxRVi5PfRdDOk1Fbanf6iYY4m+yMWzWhpd+2lWYWwj/ev1Y11+haf4cMCz7lZsdK63RfDB1O5Myx7YV79K5J1VblZ2RpPdGBo0mpM4lKb5XA/CszxFpesC4AeNpC1ekan4i8PeEPnYgyLXjWpfFya51ZbmNP3amnQhOUr20M8RWhCNr6nuHweh8baBdEW9p8j9G9K+iprXUJ2N/rBLN2HYV4P4E+OFk4S1jUA+4r6B/t61vbHzmYYYZNd6w8FLmtqeZLFTlHlvoc5Nqsiy7Lftxiuj0G4vLh9s4Ix3rqfBmjaJf2/2qWMMcE161ovhvT2AUR7c1TSMUzzS3upoLlUUjNeg6hqGt/2YFMO5COq1Z1D4eeRdDUbNsdwD0r1rwNAdSh+weRvKjGAM1MbJjex//9L+U3SPipJb3LSSNtLMTivTrP4sQXbLbMwO/jFfBkt/JI37r73au18M6H4mv7pJ4lbArg9nG2p6k6muh+jOi2f25BeRNgY49K6m2ufLcQyN0ryT4e2fi2W1j06GJpGI4xXVa1p3iDRbkR6jGY2Ncs4rZGsJdT2ux8t4s+1TrarcErivOND1t/LETGu3sL1kcMehrmlDsdMJo5/xH8PrXWYyjx7q85+HX7Pj6h8aPCUenAwyprWnzCResYhnSQuP9wLuH0/CvrjSY4rlN7Cuu+G9vZD4z+GlkwqvfLHngffUgfrilRrSpyUuwVacZxsfo38NfixoPxB/4LUv4H+GGqWw8H+HvhtL4d8M3EyGSLVLmC4tLm+a1kBDeawnnzs4YwYcbBkflx4u/aO+Nf7aP7dPxb0D4LS6Zd+B7jSJPDME93Ms+mL4cstUgihuZVI/fHULlllVI/mdNgUSBK7XRPDl98HNc+FF74r0e60iC+8Ha34hlk024jlivG0ia7tptT1Rpg22I280jeWmyKIAnaxCsvyz8LP2J9M8Cy6/ca4V07xrBdWlz4bsWvmL6B9mRb20ubgW5aC5fMkMBt2JC+WWWUs+2uiCp04Kc9EouN/Vu+nzfyZnN1Jz5Y9XF29ErfkvuXof0N/sd/s8eNPCXg3S/gZqOixw6nZ/up3s3+1wXUscp3SBpPLO5yC2HwsfC7mxmvxV/wCCxH7SngbxZ8QfDfwW+Gmqtd23hO9uj4kFvmS1utSuTDaXQjufuS/ZbRWs3dWwZZZAvK8fnh8Vf2+f2yfip4Xu9B8ZeNdT0zRWjk0a/wBH0qcWNpKQczwyCDbPN5snzSGSVxLJnGF/dj5t0fwZ4yv/AA5efFHWtPNroLXcelT3upRF7L7dguIZmI3jbEh8z5SIwoR9pKqXhcL7KXtJvX8AxFX2kOSK0P0p+K/i/wAX6r4x17xvpsFpe3Ot6je3Li9U3EQFwXKBlBRiBuHG4ZwM5AwfiW61q28MfCO/8Lm7vJPE14sGn3CbtqS6XalHV5MD94yuzKd/3PvLgMKi1XxP8UPh54Ks10/V9P8AEtnG50xbu0LTRxyPHHLH++k2B02uApdFAxjO3bU3xJ+D3jzWdSZ5bWFkaVWlurE/dllEcTxlwN0sEIXKzAc54X5adGj7D4mrGlSr7VLkWv5Hc/CP4SafZeDtK+KWt3NpPe62LwWdnnEkFrayeX5vklMSecRnzFOIQUXblya469sPFkXiePX/AATolza6TCRbBYhF9nu7o/M7Kzooyw2jy03tEB94eYtWNS+Jfxb8F2q6Pr9vFdpaWk2mwTxSyQwxRK+EbaFy0UoVcoWU8Z4IwOn1fxT4A8RRaK2kaHrWlQnRRFHDqckd3E+qCVMzRmNkjWKaRk89SU2MkcZwNpqoczk59A92MVDqvI0fiF46+Jvgj4Xt4H8T63exRajc3l1Bo/2WSxnt7mfibzJZcST2WJGbZBuV3k2ySLzXxN4h8R3NyLu+lhEzXjRteSSbidjE5Q5J7BVyecKATgc+yjVfGHxr8e6L4c8Y3+5dKWbz12GNIWx5txsi243O+3zJP49obdwtfRZ+HmkWGmW/h57GKAWSbFRoVWRmyp3yNjLyfKvzHkgDNViMXGk1Fk0MM5pyWxkeGPDPiz4k/Buwn03R9QVdPa2s5dW8oyw/aJJRb20uZCzSTTkxqI0Qln+6mw5rk/it4H+IHgnxJJfabHJBPDarZzQ2/wC/hgsrpnIVd5d33tuaRz8nOxfnXNfR3wz+LniL4aaVo3hLxVcG48BaD4ki8S3OnhBtaeFWEfmnIV7eGZhc7JAQjJkEKFC8b4s1n4q6l8ffE1r4Pga01TSdT1PVZ2a4YNMty8M724yjJI00mEsk2IxEqqGAwaqi6bjeD3/AmqqnNyzSVlp6Hh/ww8f3vw+t4PBWiiTWLrxBDY3FsZibSK0kkkdHVsqxbJ2ebJwsSDcFLZr9g/DXg3wFpPibXPFHgfTLTTk1G48xUtIvLj+6qtIMs7BZGUsu5mJTbmvzA8PeA/F/w1/ah8M+BfiB5setaJdSWt6m3zxb+bbOQBMqeXJw4Q4ZvLdDySc1+0ngm08M63NfWGnXKXc2nCOKeOIcREdQDjDbcbTtJCng88V4uctr93CNr6v8rHr5TFP95KV7aI+YvjDdPpWjfbrwRIiW8gdmIVQGjbLbjjYVGSjfwsO3FeeeHrLwLr2iat4l8WyC2AijuY7y3lA+zfZQ2zyYzujxKx/efKS/YjAx037SnxhbwJ4w0q78Ma5J4auNAnFxBqltEk9ybzaVWOBJAysE8wCQ7GUBsHhSK/PBPih4j1zSpNIskmubLULm4/tC8ihSWd7i6yzMN0SRW0jlv3aqy7VDBVA5p4HCv2am/u+4eLxEeZwXkdtD4q1b4feH7zSPDd6jeIPF9sbW7vZJ/wBxNaB5XjaaPzNkcmxgVibhfvDGefQPjB4yvb/w62peFbeMeF9SEGj6czyxi5vo7eD/AI/xHHHEP9JCO7YVVGwEAncRwFpdeHNRkuta0ySe6jZYkntLwwXOoQzEKrpGtxMwO2PY8ZYNGC2MbFFVL27Oh6DdHXbRm1DS2ZV1K6nmLTaVE6COGSJgbeKO05KsgRmYlTgHLelVUWuSSXl/wDipXj78duv9eQ3Sm1fwfrsVnYecljqsNtZOqYO94ZgUL55xk8bcc9a+GPjFodxo/wAW9a0xMGJbpmXHTDYPH45r9ADbeGtV1bT/ABbLfTRQW8Jubp2tmX9/G2DHbE8SkgqcLwuGB5FfCnx6lum8eNeDk3SEgjqdrHHH0qaHMpJeQYrlUL+ZxdveBZlt3Ybe9dpaw6fPIsMY6ivONC8Ka1qdxmGN9x6DFdw3h7WtBkWabIx1B7Vq0k9DmhJ220Ox8L/2b4a103uoyFo+CFJ4Feo+IfjlYR2RsdCTaSMZHFfNN40kzGWQ1guG5qHhoSfNITxcorlhsddquvXWrSme6fJPasUz+3SsNWkU9Ktm5GMYxXUoo4Za6s6zwg15PrUcVu5TJr7l0Cy8VwW8Us/7yEe1fndpreJbK+TUdNgd1Q5+X0r7K8CftIWVnpf2HU4wsqjb83Y1TiTdH6e/ACzuPFUQgtNOdwMKTjivuOfwXYaRaKmpWargDtivzq/Zh/b6+HnwzA0/xHbiBOMSsvyHPv2r771j9vD4B+LLBLoXVuwyOAR19K86VWqpNcuh6kMPScU7nGeLbbQYHXETRqvpwMV678JbzwaW+z2W15CBzxXmPi/43fB7xzpCjTZolJH8OBXzevxO8G+DLlrvTdQCsCe/9KqFVtr3SZ4dJaM//9P+WHwR+zfqkl9G19Fu56Yr9C/Bf7PmkaLoR1HVUEKouQCMV6Jqfizw38MPFEkGs24AtPvDb2Hevkv9o39q6/8AF0Etr4KX7Nahdu7G3P0FeS6jmtD2oUFF+8d/Z/GT4beBNbaIOheLhgCOK84+I37SHhLxrqkVtZIEWPox96/Ou3tbi+L3k5Lu2ST1NUHgm3YHDCp9l3ZtzRa0R+i+mOt6FvbNwVPavQJ9SSy0/wA1uqivz68HfEPW/DSC3uH3xjpX2p4J8S2HizSfnALEYxUyhYzW9jq9I+Kv2YfZeN3QV638JfF2r2vxK03xLaW1peTWfnT20F+dtu86ROYw/sWGBnjNfPg0eC21AssYxXcIWFuPL+XjtU6XukNX2Z9G/tBeGvgXqH7IXjD4l/CHxNL4nt9L8P2+l6jcQ2LWAbXNUIlmljjO1haLdM1tKJAwcBi2UrzX9jL9qf4aeDPBfhjxX8YYvEGq+MrlodJ0e3sljSKTw5BAEguLySWRlnuJrtHijRF3RxxeY6AOprk9F+Kuh6R428WfDMaYV8L+K/BEllrgPMaXlykqQ3EaAHpKiZGMZbPrXKfsi33hbxXBofxC8W2Vvoahl8O6laCyjittKu4NxtVjXKyI9wbpX858rGEMT/wEYuThGqnHR6/novu+5pGyhzOlrtp+X9eqb6HxZaWN/wDHzxv4s8Za1fReFRPql/4kv7X+zvPjs1ZZpixaPychZGW2jhQbpZCJQnBx13gHxl45+OGg6Ho/jjWQP+EPs4PDenae6gRWljDCJESFUGG3FWM0jcysgJYhY1T0D9rjwr4A+B/xbk8PaJdSCHxD4e0vxFeCSFYoBfSPdllQLktGqBWQtgb97YHFfH3hDXPDth43uNTuIwNNvI5mW7WTaINu05Py/Pt4XGRt3egArqU3Vo2irKyMeWMKvM3dne+LfDmn6LMsviHz5bMxKUAc5McJyEQt0VW6Afd3cDtX118L7XUdN+B3hd9aij8yfT43haD/AFa20hLQKc4+ZYSgbtnpmviT4japp/izw7eW1jdiTbiBmKHeQQchUYK4C5+YAYz+FfXdx+0/4Z8OfCOP4ba/pV7ZeK9MtIVg1CQI9rdWXl7BOdyhSjqmEx8wb+HAyOfE06lSjGNtbnXh6kIVm3tbQ2vFfh7SNf0ptKvsYI+Xjow4BrwDRfF1/wCH/Bes/s/Jp73EWrXcktnLDEst3AHiEflbyci1DI0uEAbfz3Y1i2nx61vUbuTRPDWi/ar5WCq92+0YKbs/Ip7gZ5z8wrsNF8Iaudcude8UWZuNSnWJFkiVFSIJkhlPmK+5SeoCn13cYjDc2Gv7R2XY0rcta3ItjyXwf4n0nwn4hhufFkDrpsiG11Ek8BZYHXIXOB+92tgkgDOQxr6ym8Y2/iXTovGcl015HefenbOJDGwiYhvu4D4Tr97A615Xosuk6J8M9W8P6poK6prl1fBhqV1J5jQ2EcY+WMdftLzbxJL0EZAHzHjyv4feLLb4UeLrjX5bfytN1ONPtQQDeqRbiJMEAOFBOQSOPmHIwdsTTjWV4O7Rlh5ypPlkrJn2voGi6jZRtd2cv2eSRJI94RHYLIpjYYdWU/KSDuUj2rwfWPAWp6GdS0C3uZ5LrVrJbODzJtqNBGdxSSRwxHyIAG/hZV4IOK+h9X+IXhDRdXi0Oa7jt7t5EhS0mkTzFLlAFIRmCnDqR7MPWuN+I3iqw8MeIpJ9ci823S2aOJlbbsmDqWUHY43GMMFJG1RnNebhp1o1FF6LsehXhSlC6PMrHwfo9j4m1PRNLuIbvWdHvnNvqWlXtzLeTNHF56S26oEhWNoy1hHKW2zT7NuwCuy8a+Kvi58ItZ1v4evrF7qiQ2kX2G8u7qaxvdMtZGdVhnt1wiTSoiGSIZKKFbvtTwy38YWWgeF72/0671iNpp4bmSK2kNpCp8op5myEiXEY2bdrr+9+YA9V9K07WdO1vwfro0WwmVrxJQDeW/nvMqKhknurtSI7bAIWY/P5uUK4bcG9yUYy6HkRco9TldPs/Enxb1k2kOoJPGsnl5bCERPkhkQr5ixgIF2ljggHqa+8fh/8LfDfgXSvsumxRlm/eSyMoG6TbsL+g+T5R6Lx3NfJvwV1bwn8PIm0mS+fUpCbadblYts5juU/49pVJ4mt3G1gmVcFWGM4r27xP8ctJ0O5jufDmpQyXdk7YsrgbRdOz+UAqlW/dw8ySF9uQvy56V4uNjWq1fYw0gvuPXwnsqdP2ktZM8m1m807wn45j1oLM+moxR1to1dJDLITvjf5UjKIhxuJ3HPIAFeijxHa+E9YtfiBp+qwaZa2NzbmzSdFk8ySdnEEzbvvbfLO2NkKHliv3SLWj6b/AG9iPU/JeW9lBkVBshlm+78qH5QozhRwF9BXlGr+F9P+MHxu0nwZY3ks2ieGorp9RKNuRGEiqYlY8BJGXaCv91setXQrU1eUl8K3Iq05StGL3exf0NL/AMJaNBb38setaXr1pb29qt0c7UddztE2X8ty2SJEILdcc189eHPCPhzXvinqN/q8ok+zMI0hk/5Z4H3R7ele7ftU/EfTvCclnfaVIkX9nzIy7Tncnl7Qir0x6H244r8tV+JWsah45uvFPmfZnvZfMZY+FHbp9BXVQhUrUXLa5y4qtSoVVFq9j9Tr3TfD1kS2mwIkgGAQBXhPizSp5RK14oO/pivOrT4pzPbxnfuwOTXXWvjq0urE3V3llx0xWMKNWnvsdDrUp7Hztqa/ZLlrduADxWWrQeuMV7Fe+ErDxdqgEcn2ZXUnJHpXzZrZl0bWrjSlk8wQOUDDvivVp6o8Sv7srHfolrIMdK7Twj4Ct/FeoGz+0JC2MjPevBItUuFIIb8K1l8T3kID27mKVPukGnOnK1ouxFOcU1zK6P0l+D/ws0+HVxouuyIsZ/jGDxXl/wAVvgBoHiHx4LLwtdfZHWTaZSm1HA9elZv7H/xTi1j4naf4Z8WzEyXDbEkJ4PtX7KeJP+EN06c2F3psTyR9CyivIrY+rh5+zmexQy+hXh7SGnkfmJon7OWq+O7O3+H2gCGfUbpzbpJ91AwHXPpXnHjf/gnr+0z8PtYk0mwt4tYnhZQRZHBw3Qgnj9a+sviF4gsPh9r8Ou6GTbXHmB4FhONr9sV7D8Kdd+Mkvg7UfiG3ify7y7ffHBIu/kcAHPat6WM5lfZdDOeC5dFv5H5D654Q+Nnw5vZdH8SWV3ps8PDBmxj8VPSsu00rx5rvWaWTPHzOa/etPjv8P/iN8Jofhh4/8JfaPFDz5udUUKw2nq4P3uRwR6VFYfskeC9AtrfVNLuUmtZWABO3Kbu3oa6YVeZXiclWk6btI//U/Bj4/wDiiXWLm98R3rBfOXGPavzq1zV4J1NvA3yV9b/GnTL/AFG3/syBzXwh4q8EeMNDBmgTzI/avDwk4rc+ixKfRHoGneKfDmh6Y0cigyEV4zrPjJJbt5LYbRnj6VwN+3iF28uWFlq5ongzxDr91HbQxM7yMFVFHJLHAA+p4FelZHm88onQ2WuXmpTbM8e1fT/w28bXPhkIj5K19b/DX/gkn+0fqPh+18SahZi0tZ1BZlRnMeezHgA/pXonjr/gmZ8Qfh14bGva1dyxqy5jLRhVcj0rz6uPw0X7OUtTsp4LEzSnGOh5dY/EbR9RgVywDV29jrun3dsMOK8S0v8AZc+KV/di1toWiXj527/SvoXw1+wx8bbi2W4tLoY44I4rGeJw0fto1hhMTL7B758NviT4X0/wtb6L4k8NaNb6Bockl/qfiC6YC4ZrhgmycnGLeNAvlqMgsDnGBnyL4gftd3f7Gvx28a6fpug2OoaJd+HBbaDpTWsEuni9v54L1b2ZihlZYblDOkKkGeTYkjLEvPjfxL+Geu6VZ6h8F/H1w0EepxoJXtnwSI23DPtnqOhr2K01zw3e/BKLwT8cNM0/VrbwfNaLPqR05JtTl066ga2tZYLrcrQBLgR/akG5CqBjgGrjNc0akdU9PLXQUk+V0pq1vwtqfmpof7RHxV1j4+H4yeI7seKPE00F3ZwTa5GLryxJazQhhAnlxKYYnk8lVURI53lGIrYs/Eug6z4H0H4e/wDCLaDpo0hZo/7S0uxMGoahHNg7b2bzGWfywPkYIhGTnPFcMPh7rcOrN4w0CC2u9Mti3myWeM7JRuKiEZ2AfwoOB91Ttqj4i1GCHwzPIrWwiE8UqtwbmZ50aNFjx8zQgfM6rgBtrda6VUV1GG2i/wCAY+zteUir4cax1l5oLK58ySyHloHPzmKM8Mff19/rXVeG/C8/i+4TVNVnW60jT1/suGKVtyJLLlkiVOPlwjPtH3RtbG1lrzC18K6tp1hB4606PyIftz2lu7LskkmijDSbUAwVQHZI/O1mC7cmtSz0XVrRo/DIuEsPJiaa2iJcRyzH5Wfdu/1yIqdeqjjABFaTpvWzFTktNND6H+CD2nhvxRN4Ha2EEkUUs8ZXkmKRg6ZyAcIrBA2OFwOmK+qJUgjbznXDvxwOTivk/wCBelzeK/EkvjDV3MOp6IVguNq7GmEqNksBwUOB9COtfU95qunWx3M+RHyQOteDmC/e+dke3gv4VradDgb2CwsbGV7g4jVi4HfL9vz/AAr5g8X6X/b2oifTUjtZF/fpHGWcySLgFTGuckDPygDgZ64r1nxx4u+020ZDbt5Z4vLAYYjO1i3QAAlR+P4V5Dpmk+Idfu7W2sAEnuLiK3jMcpdlnkYkQzMi5jZcZkwpUKQQxHA7sFSaXOcuKmvhMrUNPvdfg08RtZ3A0pEgigto9txCkRZxCGWJGzlmZTl2PrgLj22z0qx1q11G78Y628muWc4hgsbxpZJJLWW3VhdIT+4CB8x7U+Y9cbeazfGsGsfCX4kWeqao8cWr6JdxXCtPF59jLJYsu0NsaNo1IGJsqcRyZDcV9V3fwku9d+LDap4f8b+FrO6utOh8Sx3mnWeywSW+3pdWENuJmBjhdFlnDTDtIFYPsr0eTmOLnUT4M8TeI9V0vwbfS2+ftlwgt5URQFMQIZolQruHmnYR/DImBggg1+jml/Aizm0ezTVnS9vrHTbPTrud38wMLONFSGN0Cr5ClFwu1hhE5LLurw/xX4T8M+MNdu/G3iHxRc+JL/S/E9ha3U8rJEdWtMxLFcQQLveNYZ/MMsQfy0hRduMFK/Qia80vSNMjjmlgicR8gsFA2Llzj0AGSegFeLm9adLkhDQ9TLKUKjnUl5I+OfE3w+A8Q6f4g0/TjNbWkh/tCwVQFmT5iCgb/lohbchkwHPUgcjwix1q08Pz39lq+jSXMWo6bBY2sM7BDBJHcR3A+YgmNpUiZXaI5J+9uHA/Q67n8EWCf2rrOq2OkkW8k8lxeTC3KxRlFJYPhvvSRqFVS5LqAvNfnP8AGPxVc614gn0PTI2k+yXHzOJFy0igBnCDg8ttJBIT7ueTU5fWrNWlH3fM1xlGnvF66aIueD/GPxO8HyaH/wAI/r1xJqmn/ZhCVYSLNOpUlXST5GSRhhl+VSuQTg5Hpvwm+JWteH7zxr8Sr2DzdT1C4hvZX8uONEfzZJJ2WNR5QAdj5YA2cenX5s1bTltZYIpvIlNxgIsSsRKysA0e7lecgENjpxxSfFHxdf8Aw3+Gt/o1u8SSajdQyju5SE5VMDA2kfKy9MCumUXNKHe34GEZKn776I8D/az8Z6t4p+JFxFqM6zOQlw5QAANIMheMDgHJ+vpXyrFbXG4MtWvEviPXPFWuXHiHXJjNc3TbpHwB0AAGBjAAAArLhuLiMgqa9mFPkioo+cq1eeblY+u/gn8OdU1awbxTrQxp0R2xg/xsvt6V+kml/sk/EfxZ4Qh8W3cUVqoAkjs9u3fGPce1flP8Pvifd6R4efSLyRzGufLVegJr94P2Iv2nIPjF4DXwj4huwNa0QeWqsRumhA4IHt0rwsyden+8jt+h9FlvsJRVPrb+v+AfG2v+GvCtncC0TS5F8vCTwv8AKwI4NfJnjr4AvPLNqugwPEjMWA+8MGv2b+NngPTNXf8A4SKxhCzRuPN2j7yA8/pWJ4zT4YaVYWGseC7lJ0u4wlxbsOEKjk+1XQxXPDmp/cTXwqjLkmfiH4Q/Zp+MfxAvJtO8DaLNqc8CF/LixuYD+7nAJ/EV4TrOj6lpV7caVqcMlrdWsjRTQyqUkjdDgqynBUg8Yr+iz4S+Jdf8C/EXTrnw1ZTW15dMPsYiiP70ntjupFfkz+314huPE37TniC+1PTxp2ojy472NVC/vgvUgd9pHPcY9q7cLXlNyUla1jzsbhY04xlB76Hxj4W8Q6h4U8Q2uvac/l3FnKssbejL/Sv228NftHJ8Z9HsdQ1NYbO5SJY5GQ8MR3r8Mru2dX8xeRXW+C/iJrfgy436fIVQ9UP3aWNwarK63QsDjfYe6/hP3sX9nbUPG2q6Z8QprqO+0eykDXEScMVx2q74gtdO8P6tLpuhW09pZud0KTgqSPUZ7VY/ZS/aitPGXwJbw34Xtre617S4WLxuwRunXHf2rgfDHifV/iV4o8/4tyzRX+nKSlsxCYiJ4AC8Edq8mdH9y01toe3TqWqpprU4P4i61c6Raf2pok7W92jqpkTjGex7VY+Hn7RmoeGvEQ0a/mfVI7hVCiR8BJD7V9s/DX9oL/hS2n6poGi+DtO17TdVO+5W7jLuiYwdp2nt2rG8Q+OfCXxijOi/Cb4d21vv3yT74NrLn+5gdK2wsZxhurLz/r7jLE8spPTof//V/GHW/hHca/F9rRcyNzx2rj9d+ElnaaQbe+UPJtr6EsvEuq2KeUij58DkcYrO121eSNrh1Luw49K+ddJ2sfRqrrc/PC7+D1peXLCOEAg4HFe9fs3+F/hz8J/jJ4a8Q/EyDOlC+jSZgufK38K/0U4z6DntXoqabNaDzPK/eZrz34gXunS6VJDctidRxkV00JezlF7pdDGrFVE1sf1v/HTxro/7L3wwg8cWl9HceHtUtttlAPmaOUKWwSMkhhgjPTGK/nC+JH/BUrxX46sp1+I9vb3gs32WllAAgHHUk9f0+lcj47/aP+Knx/8Ah54c+DGiy3OqXrBba1s4AWkd8AAAD2H0FQ6t/wAEU/2ivCfgzUfjH8f9Rh8KaVpG2a/V4zI9tC38cjfdAA6gDj1rHEvDwk1U2e2mv4HRho15RjyfEvuOasv+Ch+majttY/DJSTGA29cA1xvxO/4KCfF2azk0nwhHb6Wm35X++/8AQCvnjV/2YNUsdbu5fhnq0Gu2kDfu/nEbyJ2YDoc/hXg/je3ksp4LeYr5jLyq/wAPYg1FPC4Sfwx/4HyNZ4nEw3lZeR9BeELzxF4ztj4u8X30l7fzNuaSQ8/T0A9hXuCX+p2vh3UE02GPUJZ7C4sjZXC74LiK5XayMvcg7WX3GO9fFlh4ovfDukhbd/lUdKwNP/aom0e/FrqERCqcBlPTFdTw/MuVbHnKvyvmZl/s/eILjw14ri8J+KWuNMuLe4FlePdBtjxquBHLEwHkujDgkkgnDKBg1h+L/C7fbLqfUrGKK6S4kVUQqwEQkPzMg6blwQuR3rsvFF7pPjrTr3UvBOo3MbX97Hqd1pwEbxTXMaMpmLPhw204wGweuM1b8P6n4Z8VWMaX17HY6mmRNHc/Ik4AyHjk+6zY6rnJXkdCKVW8Ze0S1LotSjydOhy/gq7e/wBF/sG7w40tn8pNzOixysZCwUnC/MxDYHOAWrN8V2wNoP3Pn3FsytCxxnAOWx0+bHB9R9eGfEW2PhW8jutKuV+1JEria3cP5bZaMD5MgBlzwfcEdq4o+LfEN3b282tQJaBkyNo2sxUDdgcsM9u2GBU1VOLb9pHZlyko/u5dDuvhz8RNd+Hqaj/YKxagmqRQRoZQ7zQrFJ5n7sniPduKurAqygAYNbniz4oa/NrkeoXh+xpEsOGt0LqZIyckx8435VSqg8DjGawPDmh6vp3hObxXbW9sbKR/9IledfOjfax3lF6RYjI3dN3Ydaxr1H8UabPa26eVNGF6kDZxlWU9PvAYzx+NVKC9peUQhOShyxfyPZtc1T4p/ELR9KsPF2pmCLSrP+zbS3+zxRpBYiZZwqrGFIl3ohLyNI42jLFsmoLzQNLS8N3bRGKXaF82NzG+Acj5lIbIPOfXmoLTxkt1L9gvtsdwkot5nV1YCRgCHJB+VGyPcE8iu1n03VdMnj+0xRl5VKlAfMHy98EZGB/hXHUqTuubQ6qcI2904r4lXvjv4g6RDqGoyNdXFgqWkBCRp5ixYwpRAi726FsDf1Y8CsjVtC1HwrdW/wDaFmbZpo4L6M+WsilDzE/G5cgpjnDIVwQuMV661hPqNvbaV9jeMM4YboWeMMp79Plxx1FYOv8AhRvDGmJa2uoTXFm1zJc+TLJkLcSjDuqjb8zA4x0PuerhiU/dluOVBrVbHlXhXxNpnhnVLLxXdKynTbpJ4ZAkcp/djOSJP3ZHH3W+XKg8YFfRdp4h+NPwx8fDxHIH0jxIqrKl5cwRSahGpi2oVmfzEaFlbO3a0T4DfN3+YNT0DWXsdH8ZX1o9nYK06JE4ZN0e04k6Abl2urITuT5cDBr1zRoI7fRIrjWTsKILeGNnLCK3jOUQZ+6q5OFGFXooFdFWXIlbcyprmbT2O5PxO1uHw7rHh7xPc6zraauhNslobaOFtVD7op7lpE8+UI5JwkiyEDZnZla+jvHcvhyy+HlvaJpsXh3TNPtop2tLeJGkub+ODyPtEhVRuuHUmJWG35CAwZlDD5a8C694F1fx/p+q+Krxzp2ju0y+XG0m64jGEj+UEKM84x27VpfET4yWt48t742hkktY7oi1sbYrAkqKfllIYtJu9ckY7AVyVHWm1TS06/5HVBUoXqS+XZabnH+OvDvi3wraWt54htf7K+y+XqQjYcsWX5F2n7y8ZycZ9Bivlj4q+MtZ+K2vR67rUFva+XCkKQ2iGOL5c/PtyfnbPzEegr1L4rfGfVfidFBp1nZDT7G2XAjDmV3I7s55/CvGrazlmXy5AQT2r0KNNxjqjycVWU3aOx5Df6E0DdKwTbhDgjGK9s1WPSrM/Z5W3uOeK5S90uyuLYXKgJ7d66FJrRnE12OU066FuGhI4evVvhB8S9X+F3jux8V6DKYp7aQFecBl6FGx2Yce34V5HNaSQSfICQtSJOLhduMSLQ4KSs9i6dRwtbof1PeFvFGj/EbwNZ+MdKlWS2vIwWXI3I/dSPavmTxp4fgtNbubDRrKa6iuULSxxRM2w+owK/KP9mL9oHV/hV8QLFNXuZP7KuHENwjOdgVuAxHT5T39PpX9RvwYsZtcsp/s6I0qqm3ABLIwyD9K+TxOHlg56apn1uFrxxcL7NHwD8Pv2stT+EvhsfETVNPh1C70SKWCxNwMDONoHTIIr8SPiR4m8RfEzxvq/wAQ/Gcnn6lrd1JeXMnbfIeg9lUBV/2QK/WT/goP4l8K+H/Fc3wS0mOGRxJFqNy1v/yykcH922O5649K/NS78KQfZEuLSVZd3Bj7rXu4WLjT5kvi1/y/A8LGTUqnL/Lp/n/XkeASaQnVelYUui288hjPDCvoK98D6rbSrEsOC+CEPp7VV1P4Y+JJtM/tZNPnaFePOhQuq/XaOPxroVSxxun2PF9O0PxNodx9v8PXc9nLjbvgdomx6ZUjiu68IfFT4qeC/HaeNruebU5WVY5hK2d8Y7e2O1N03ULrTZ/s2pLvQcBgK7S7udDkt1lth8/8QqpTbXLLYUI8slKOjR98eGv27vAF/YC3tYpfDNy0Pk3BuYvNEue4K5AxX018K/2o/A+hoNf0nxTaxyxgRoI2UM4PqD0r8RruGzmXMK4NYlvosOoXPkNFl+g4zmohCnFJJWSN5Vpv4j//1vzXu7SCSdlt8fuxx9Kh1bxFZ6MltYTRidpR0HbFeWX+s+XqUMqzMY3AMgXsKm1TULjxTFOPD1oUtrBf+Pkn7xNeRy2Vz2LnQWmga34wv0k0K2LI77eOgrzLxV4UQeKX8N3MAa63LEkSjdudyAqjA5ySBgc9q1PC3xZ8c+CdGn8MWSosVw/mCX+NRjHBr7+/4Jua/wDD/wADfE/W/jj4/wDDy+IfEGgWb3GgR3jMbT+0pOEaaNRuIRckFeQTTlKmo819EgjCo5cqWuyPtfwB+zfpf7OHjH4eX1hp5vfixP5cGmWtrED9ne4UMuIuxBT78h2gcZr618efGv4qfFP4f+JPhj+0H4QuPGkDagt1qZtS1pLALZvnSUw7lMQIwwPAx6V1PwXvfiv8aWFrolpA/inUxLqd3qETI19JHGD93zfuiFW/d88dhXxp+2J+17L/AME+rjRNa+CGq3ur/EXW7W21TS9Jt0S6ngsr9jGp1ZWWNNswWTESIxYK2Mbd1eHzVcRNLeLevu3jHt27O78vke0o0qMeiklprZu39Kysfy0ftqeFNI+CX7XPiHSPhxFfeG9I3wX2nxGX7QY7e4jzjIPzKZBIF64HpxXn1l8DvEfiXwzpHincy/2w8nkTSYEUoRgHxjkbSa8q+NHxi8XfG7xtP488UPBbXt47ziO0jMVtbryTHbx5byogWJSPJCg4HArqPhv8StA0m9tk8PS6pa3FnAruBmaEyKP3jxx5YIn+x1r16VOcaEUnqrf1r/XkcVaUJVW7e6/66fkeU/Fu4m8C3N54T1Ij7VZsYm2HKnA4x7V8fXF3JeSs8nU17R8W/F7fErxXqnibUrxri8uJztwmwbF+VeO3ygcV51YeFL2dgdvFd1LSK5tzyqqXN7uxN4Tv9QsroCBiB29K970Pw8viGxh0+yeOzu0lMtv5ibonJ6o+MHGQMDoKxvCngNhsa4x83517fD4Xk0q2SSz+bawdT3yKU5oUItao5z4+33xU8f6b4WPjS3tok8LeHtM8NQtY2gtQ1ppXmC3M7ISJpVD/ADSnaZAqfKCtcPBqul7o9Pu7gXbQxRwRTyHd50SDC43ZZQBxsP3e3FfbdvHoHjHw2q6kN4ZCrpuKkEjB+6RXz78Rf2dCbObxB8PgojgRBHYSMXkkwMP857nqBj2+mEqnPpM6acVD4EdF8C/jJ4k+AviY+LPBVpZTEh1aG9gEiAsjR+Yn92QBvlYhgMDjoRE9v8NbDwrceMNAl2a3fXs0M2mBVihiim3ugA2lWtQAqFRIHUnC4PzV836f4b8b+HtMg1FosWc6eSu6QjaUOGxycMT8uGAxjir/APadtY3SSXlrKzpglZWDIxHQHofpimrrS90aJrfYk0TWX0Dx3Bq8UNs09jcW119mukWa2m8gqyieLdtlRlASQZHmJkEg1906b8Rfhl4tluNa1CxbwMu15SrTS3djliXP2fcPNSIdAh4UYC8YA+f/AAP4C1zVtAHivwZFPJ9sJilkUq0kZQlQhDDCjdkKNwz1HFeTavfeItR8TSeE7+PZfIzAi4fyl2p3ZW4BHf8AQVjWUavuvp950UpOl70ev3f19x93a5eQ+H9JbVpNT065solR5Li1uo54CjcAo4I3Anodo47CvnBrSX4ktDqyD7JZb2eN87w4U/KY8diBnPHpiuPvPhRYeFZRpXi1v7PvpAsgSa1khm2NwCpmRXKHGAygKQOKyNT1jS/DugyanoWtOmwbYEG5846DDE4/ADNc9KhFfwr/AHG9Ss3/ABLK3Q7bxhp+kW1lB4T02XULi6WZpbcLLJPtnlyHdYQxVSxYliqjJOWNdovwv8StpdvP4wupGvLljFHbWKeY25gdo9XcjsBtBryb4QfFXQ9G16fVfGGDPcG3tobo5YRROQJGY4+RAMFto+6MAV6F8c/izoN143s3+E2p3M1vpuSt2hKRtIG4MRKqx4H3sAHoOK09lWclH7K6/wCRj7eiouS36I5Xxh8a/G95daXaWz20B0GzSwi+y2MdoVWHhfN28PKBwzkV4F4j1e51u9fUtXeSa7mOWc45P4VO0c9xfS3NzLuMzM7epLckmlmFjAqx3ZRd5CpuIXk12ppbHnycpbnEyzX0IjE0/lZPAWtG2k1RL0XYmffHwM9MV9LeA/gDpXiPRIPE3ie6dra5i86CGzYHKHoS+OvsvSvcYvgD8JptKe3kguraduk63LMRxj7jDGPbFck8ypwfLqdVPK6slzKx+fLwWzIzEfM5y31qv5ccfDH9K+qNb+A81tN5VhM1zFg7ZFAPToSvB/Lv09uB1T4N+K9Pt/Pt0S9BIC+XlG5OOVfH861WLpS6mUsFWj9k8T8u1dxE4H1rPufDUJcTWnyMPSvYpfCd/wCCtSvdB8S2ElpqC4jntbldrxEfp06EcEdKpR6fp7fNu2AdQ1aKokrxMvZPZnjH/CNX5m3x4f2Nfqn+yD+3nqHwnt4PDnxJXUXksLaS3s9SspA7+Xt+SOaJ/wDWBTwrjkDr3NfD/wDZkaReZCN2OOOay10YRS/ao88/xdlp3jNWmrhaUPhdvQ9M8SeK9W8X+Ir7xjrjtdX2qTPcTTN1LMe+PbAx7V0fw68LaR4jhute1LUo4rzT3XytOf5TdIePlPrnsK47QrvVvtdnZeFrT7TqMeWEITzPM2As3y/7oJ9gK9Nt47/xtImprZSW7ylfn2iMNkfLs98+lEpq+tgjTk0uVGx4/wDC3ivwoLbW9WHnQ3a7bWWFgyhhzsYcEFelfSX7Onxi8R+EvC15o9naSXJhP2i9guLdUVZyMBM9TGw56cV498Pfhx4u8RarJHHrdnpsnlTJjU/NmgkfH3BsRtjueA5G1T1IravtO8c6N4tkg8Qah5V5YqsrTEExyyxgKFyiEZ2n5R90461Lqw37eT/4Yfsanw/qj0nwr4W+Cq/FdPEfxg8LWx0HxTZTptZgEgvVOSY8ZG7+7nBz0rzf4k/sp/CjTfAusePfAPiB4LnStQhjGlXZ3STWNwQEmRsZJX+IZ4wc811Pg7xFffDj7XrWjtY30kpjkf7aAyCYPvPlqcfN06c4Nej67DY/ECTS9W1TWIvDsuo294djDdbC7kywlmTBCROV8rhgQSpwBWkJwld/1tb5d/kZThUhZbW/4f8A4ByPi3/gmj8TfCnwS0L4+zyx3ugaw8OZ7FluUhjnHylincfxLjIHNe2fAP4MfswfDPUoLrxO9xrd3qFu2yZRiKFfl/fQ8fvgAcFRkjtXvngz43fEPwR+zd8KvHnhTUL3Q7/w5c3GrappFvaxG3uYWBQv5T/LKwB+RmG0nkHivZdT8AXvj74XeJvE2meA5/FMd3b22taJdG7SObQLW4djNmONVKuTk7Rny/ungVi8PHlgpvp6K97fctPv2G8RJOVlpe2nay/4P3H/1/yH07whp2saRB4gutR+zw3LyR+QFzIoTucev6VzemR6hpeo3mgyaisemwlCyt0bPPapw9lb3tjb28nlsF3SB12jcTwDz0x0rnZNZhs5LnXlPmymbKmRR8y9Pu+1eK5Weh7ajpZmrdL4f23d/NE00f2dHi2v85PJ+Ve/TjFfth4i+FfjX9jz9gnRkGvWWuXXxQn0vxHcyaMs8jaRb2cqvEhmhIYeYRslf5VKB8Aqpz+G+jadN4712y8JaVAI47jyhd7JDERZq6idhInzRZRtvmL9xmUgdq/s1vv23v8AgmX48+BGh6B4s0C+0jS/7INwkN0i2WoKLArbwRWVrF+8uZrpljg06KBT54ZfK+XLHr+qznhpSoJc146XWyu/zSs1tbU5J4hQqwVX4bPp1skvwvp16H5zfDX9p74w+J/g34i+FD6s+meE/AR0az0m6sbOHTda8Q3xuN509Zjcm7j+1TzW0N5N5H2WG081vMG4GP8AnN/ay8Y+FPFvxajn+DMcRtvDEL2kd7bqpj1e6jZvP1OYyF5bgNgQWu7CNbxxtGqq3H7A/Cr4e6r8U/2qPGnjbxN8P7bw18Cra8vItduNQ1BZNJu00yOYLpV5c3W2a6fzpNogtojBFdKIlDJEWk/Mqx+A3ig/s1WGreMSdKstfv3u0nuLaKTVI5Zdtorhz++kWMwywqqKsEg8xowVIY3KvKvGm4q2nlbm26WV7X/z1V4io0XK8vL5b677Nbee2ll+Kuo2k/211kh+ztneI4gEi2vzhQPuoOQo7DHbFeh6Prdv8Koz46lsTNruf+JOrsDbRKRteWVOGJ2nCDuRzWdouiaZe21xfXQngW2i3yR7Rvj+TlcHoRyPTOOledaxqx1+9nuXtorVpn8zYnyqoAGAB06Dn3rCDV7I9Cs+WOu5iaF4UjvI31i5mVpDId4P32ZjknHTkntXrenaJBDEFyoCjiuR0lPLhWAbXQnep9K7CO7RFCE/KB+Vb2PPuTPqdtYSL5Trkd/auv0jxxCyi3kdWHb2rxHxCuJDcoT5aqCQq5JzWJZvLaRsdwEm7cobrtx7ccVLgmhqdj7C8JeIdFttUa1dQJLhWaI7sDK16bp/ia0v1N3btHiJMCMAszPj0FfBNrrMl3b+XIcSRSq8ZHbH+cV9Y+B/F6Qos1rKpgfAKYx29uw6VhUpdjeEzs/FGgaN4k0e1ms9InfUZCTM1ztSIHttXufrXgPjj4Rrd6f9vs43srqJSG2EOrDt8v8ADj2r67064s7xZHvjGVZerdAfQVXl0axmi2sSccb+v5D2rFSsbOJ+VemeNPif8Nr6+PhfU7rTHuoHtLgwHZ5sR4IYYP4HqOxFLfeKvF9/dwxaxdLqHAZJp0V5HDD7rP1YEcEE9K+rvir8MU+wQ6jYxgyzyOWIOSUXuVH3a+QtU0K40yfE/KcnA4I/z6V2xq8ySZyuHK7o6v4lfFL4t/FvxCfFXxR8Q3+u6i8MNmZ7+YyyCG3G2OPPZEBO0AY59a4KOwtoN0TlvNPKH+Hjt6GmCeO2Ku2XR/3cp7Z7YqrObu3PlJLvg6xt2Ht+FXJvdkRS2XQ2Y76JdpK4bHK46H2rUj1BpTlc7B61w0eoQuD9obYV5UgcH2NVTqmABAxYnoB0qOU0ukdlqGtTWOLeFA1wx+Qdsep9qr6VoD+JdXh0uzWbVtQumRESLk55LLGvQnaMDOF79BWJFo9/d25uLiCeS5uIRLGgB/1ZPD+6nGFHcdM8V7Hovk6Be6fb2tu1vrMTJNDHAAwCZB2b428w7o8jghiGPQinay0Et9Tf8FfELX/hwJND8LvHqFjFMnmi6HyK7NtbbyPLLfcA6Fh06mvXY/jTrdxr9tcSj7Pp5khiNrFHvDxuxGd33lYggDp93pg1qDxB4Y8T2lxo/iDSINJsft8N21qJi9x5OHVBGwG7cska4DfwZUgYBPPfEGw0g+GLfXfC7TQXGkyCyWBcCGOR8S7pXwGcvuyW4CZ+XjryOnCUvegr99DvjVlGNoy0XQ91g8deDrm7Wzj1GKKTeYmjmUxsjhQwDFsAZU8dqj1bxZoEMZNtdKXjcgNFiQ7o8EjaPwHb2r4+1efRr+3afW9GluYpoHaKKCZ4kYojDG9j/C+Rg53IQV3EYruvCnhjXLrR9Su4Le9vI7Pylc2sIt1Fy0YyXJydqpsYqSrFBlDxxzvL6Mdb/kbrH1HpZfiaHxKstJm1BZrjUJZb/UJC0Tzc8ntk4IB4AQjgY215Q9ukFwbW5OHU7T6Zr3zwm73Phu8stL2pq0eiiXy7i2NwsilnWRRkBlkijIZIn+Y/Kyn5a8X1ax+x6hJYzbk80eZCWH3h0IwecgjkdRXTFL4UctR/asUY7eSGQBDtz0PY1oiHUWRp7YANgbgvQis2N9rhSwMcgBG3LYwOw6n6Vom4MTMUIDR/K2OM59PY0+V9DLmRyWqeKNX8OXEd7ozyW2oOWgjmiby5FEyNG4B4xlGI/H0r9bvAHwl8Q/Ef4W+GNfvNDOm6l4o06yvbCXKxx6hLKVjWOBlYq0ksuI0hbZJvbsCrH8fJNIl8d63cWMU4/wBDVVjA/iMrBWB5GNoPJHT6V+vPwA+NWnzfCu8kjkaE+HG0i1udOkkMEhfyWtUurGBN22aKVEeTy5I/LyJWUrzU1qDm4xjur/l+WhdGv7NNvZ2/OxR1m31LwT4guLac3Fhe2NxLbzDHlyxzWrmN13DoyOpU47j0rLn14ahIy38RumbGYy7Bj7nHHNfZ3iTSfA3inw/H4osr1byXTLG2PiO71KUJMLy9uJooLqWeZwJ5r18xMsaLtkhyV/eCvmXxHoml6Hey2NuNkUZwFI+XI64GOB+lcVacqUuVqy6en9bnfRjCquZW/r9OxyOvynVtFtNJgsLWBLWWZgDGjM3mhcHzfvtgjKhmIUk4wDiuPvLVyi2+oRy3ct2/2OCCJHlluJ5OI4oVjBJkY4CKASx4qr478UW/gvSft2rXC2pdH8q3dSJiycbdhAwc4wenIxxXvP7GOmy6l4i0f4/TGdpdGleXRBe7Rbb4CBcTIMKGmU7gsDur4wYuRy71eVS+5bX/AOB3t02M5ypQTX3/ANf19x7X+y54guvh5ZQfC34l2WnXOqeEW/4R2SFblmZbC/QNvSMozNHBOx3qqr5JDrsG2vqz4YfC3V/gH4h1D4kTeJ0t9H1DWPLksri5ZWuLi5heJdkz4SSBvlcoy5AZWIxyNjxp8LtG+JnxNsv2qdSuEabRIJLu7ntW8r7faSfOtzcgt5rOpTyjNkMo+WQNtDV57pkWhftc/DK08a+PdQ+32GvT3P8Aot/aA3Vw8JPlukkflp9qs5F8repEio2yQHarH1IWi768vTzdnZbbJWv5WtpqeBP3lslLr2Sur/fr8/Q//9D8VfFMEOnXs00AFvPDDENuQU8wRgk59MGvKdU8R2V7Fp+laTd2t48UCBvszFmjYnJVgAfuj8zWynwg07xHrKWDXsgmkeT9zdOfsw2j5NgBGM9ORgV77+yb8O/BnxG/a2+Hfwb+KX7rwxqmu/Yb10l+xRiMW87RKZlAVFluUhiL4PD4HWvIpR55qnCLu9lp9y/RHsu8YOTeiX5H3Z+yTbad8NfgL4Sf4Sy2unfFP4jXcd7rGpXTxmXS9Mj1DydN02MTLsto5UWS/wBTlGJ1jREHSPZ4l4d8KeKvg148i+Mvwd08+KLvw3Pdy2T6wn2qMyOWh06WwjYARsnltcWzTPgFY92EjxXXeB/2f/Hng/xvfa94l8O6nqWmeFoINOFuFM225uxtt7W3jl8zd/pbNMyoCdiO3BAz9zfAn9nHV/GXidrLxzr2meALS1msNFutQ8SzrbiW/SAs8FtCJPMu5Q7OI4oxz8zF14B5JYr21a+CV30irPTonFenW++lmdXsVQpuOKaSW729dfnpa2i7HlGhfDu78CeHZfF/jmDS7ubRrW3ne6bWH1RLVrrakMd5eTQI+4Jta4EIbcuSXf5ifxB/aM+M/gq7+K+mad4INvfeE/At7Lo1hbC6uLeG8sN0f74/OfKtpfK220ER3eXJ85DSsE/VT/gsH+2DoPgnxDr37H/wxt4NWtvCsWnLrWsve/a7y/srG3ENnFI1pH5OnYkDXElvv86SNYlf5WZG/nN+Injq08S6bpHhnw27DykY6rLcESy3F9FuV7guAAhmDlUhBcQxIBwWwvThaNak5yqv5b6Wdrpq2m3z9UuarXo14w5Fdd1t02afz+St0F+J/wASvDccGqQ+G7CHT4NYkkMdrEqpFaQTSlzFFGnyxovCRoCcIozk18wzXrPdf6MpkfA2gV015oul6XayyXZ3qnz5bhFFaujw/Y5Ps90FgdnTZFjDnevQYzwRz7d61oRivhRnXk3uWtNsL0WgjlO3ysNsHXaRj9KsT2M0d0WgUOrLsIk68dxUDrKbpVUSLFK37wAbc9drIQTuXC4wAKsQ3/lkNc5xP80WM7vl7YwMYFdS8jkMO4W7VwyZ3ZAXPeszUN6yfK6lTxlfeu0ubCfyi9uw8p9pIPQjOR9MZrAGlXMMjZh8xOScHAI7c0mxpHP2kcS3Xk78AnHFei6FqsGlaitmo2kAsp5w2P4frXI2Vpcy3/8ApMW1kXG1OOccHntXXWekPj7XIu94snI4xWTsaJH0F4Z8RLKiQ7mbGc9Btz09K9RsdWtp7dhHIHCM3RxkHHHH+FeBeHba1n2veOViTl2iHmcgdMD34I7V2unXNwm1WiVYmwQornkkbwO9u9KHiBm+xjzrlBveJOgVRyeBjGK8F8Y/DyKZGniA+7uX5cBsfX29K940jxBrPhe5OpabcPbpdjy3lXKnngjp74/liluLeCWAR3JZxEcCVv7uAB06c8elRe2xdr6H5xeKvA2paVOt5BC37sbkxyMd/wAMV5pPZ3lmAJI5BCxyMdM9OK/S7XfBdqrmOOPzgcuuzhQB/npXhWu+AoTatsU7Qpbb3xW8K/RmcqPY+K7lWiifDYI52nritDQdI1TxR4gtdO0yPzprmSNCNvHzHHQfwjqfYHsDXSX3g3Vv9LtVt2AtnyoY/eVumOOfqK9T0HX9B8EaOP8AhE4QLq8tY993Nk3EUqH5lUKeInbHynO4BRnbmuq917pz211Ohu7DS9Gs49L0W0tp7xfK86/Nu6zworncQXyQu3j5cgINoFdZbeA/AegWNoFvU/t2eaGWKMqYLd1lXzChZkYq235VHHIJ2gHA82kstdul/wCJak0k+sqkd0Yk3sQh/do5AyN3HvjrkcV0Srqfhy5mW6Vro3KZxM580BsfM4TBBUoPLOAyqevSsbLZM6Ffse0eCfDnwv0i/Nv4uydZtJI5FhjkF1agM58soU2k74lXCsPUbc4r0ryfDEdlqMkU8V1bX7/afJ0/bahVjVQWm5yxPAYhV28DivAPCXiiHSLlNQ0CZFTW/kurMbIMZkMiq0xjckRtnkAM2OuCQfovS21DT9B+32NzZLY6qFnKSMgSBGPzbWw7MBwCisBx8vHFZVIJPX+v8vw+ZpTm7WVvy/r+tiTwp8HPD3i/wRL4e0+AG+ltHvLbLJLdxhJ2WeUxgKyrHFgxnJPzAHoAfsrwB4X+FHij4Qx6jFeDTdK+3TXh06K5jtYN8NuI4vK2OZZ4prdRj94+1n3KingfCOifEDTfDmuaZbeGdMsn+x6O0UurbUl+2eQzW8lz5khaTyXSQERxhJYZAGT5c16L4b+I4+H2l6l8L/EGl2ZsWgu7EXLTSXCWzQ3AZII3UytJKoPkBAFWc8EgnnohSjG1/wBf8vlb5HNVqSd7fLb+vysdB4lutam0+38JeDvLtdPeO7u5muIZIJ/OVx9phlnAVzBAUi2PHkRSjJGDsPxN8QrCGzvI7uYn7ZqDtdzK0qOkbzgMwGFRgWbDbiBySMdq/Sjw34t+Dfg+z17wfb6imiXVgsD2B1U4tpri62RzIGlMrtF9ld12HYTcRmRgW5P5l+M9R0mTUbDTbI3Uz+SsV5JMI8CTJP7gqT8u0R58z5tyt1XBrPkcelkv8vxNFK60/r/LSxxcEBeeWw1FysMmThsDYx7qw5U55/lTr+6tNGR5b+czfZ1Ll+F8xVX04z6YH4VqxadcTEiyXzJFJXCpglV6HH6fz4rM1Wyi1bSpobpUWORCgH93jjHow/I04tXIadix8GZLu2vJdX8JqJbjybh7mZbb7SPsr4EitEPmjVM4d8bdu05A6U9f8Q6WjS6Nb2TjZLHcMpgeM+anCyYwPmAzhuuCcHFfTf7Ll38FfAXhWw0/4j6pfx3d+txcfZjqs2jWw1CTfbwIl1bxSPG32cgSO4MRDYIZQdvlvxZ8E+IbLTZbq4W40u31G+lGnWTXstzObG13xNIHyVkt/NUoHznd90eWVNWqSfvu+/ZW+Tvr9ysQ6vL+7stl/wANa2ljifhr+0l8R/hJ4xsfHPgm+uLC5tZH2zwxxtL86mNuZ45UZthK4mSRcdtwVlqav+0f4r17S9S06/kuLq9v1txbyRXMsSW7Ix80CLLrKJk4O8jY3zL/AHR4/deHtTjsI5pw6wTCWaMs4aOQQHbJjB6oeDnFaPh3wHrPiK4aSzthbQxYMs0nEcak4zn0Hr2x2p3SXl/X/DfgF2zZ+Hln4p+KXxCsfCNw8qTXsuye5fdMIIF5ZyoDbUiHJYD5B6AV/U/8HJPgp4Z0nwV8I/CVxaWcHibRrexjuN0clpE0ZZ0mYlvLL3sjfeJRQwYgrk1/PN4P+Dvifwf4ti/sLUW8P6nY7PN1R5RDFbR3JEW+Q8r5O1vmJyu3k8Dj6z+H2q/EW58c3/w8kCx+JdEtb9Zre6tY/s8r2zRzLcWcKYzczIsryxowW7V2ZQpZqhqFRuo99kumv9bdLbWbM58ySgtt38l27a/j5I/XSfxP4b+Fh8R+PdDsrq0iGrS6H4h0TXluYbvRbqcLGbRJp8rNDdENPbzbFR8+UcyL8/I/sz+BbKOP4geFvH93pV94H1XVP7Q8MaiZUtJLS+fKCWbygzQIvzRMkZy6fLjGFrg/C/j/AMQWWhzQ+MZI9bi8U+FNQk0aO4ga6TWbS+5fT7pmkdZY7aRf3PzNNZsqlHCv5LcF4X+H/wAJLr9ne/8AiFpV6uhalHqMqW+m3k0dxeT7kASW7jLbTbggxC5gG9CR5qsits2SjJRUU/i2XZK/ZtJp79u3unKvcjLm3SSu1prKy7XaatZfjqf/0fxSa91TVNfl8VtDa21xcEzCLToRaW8ORtKwpltkYHAXLHHeo315vDmr2euDTYtSj0wCVrW5mdLeZcMNrMnzbWJXdgZG3HQ1YSRbKeHyNxmiIwUDESRqRkYPQZAy2OSNtUvEF/apchiq78pMg7kb/mwMYA5OM8celeRTUlNcuj6W0t6W2PYbjyWktLHyx461/wDapZLHS38eapdQ6Rbqtsgv57JVKJkkm3dC7uMktIWc/wB4ZxXzZd/EL4w6V4rl8UeKNT1Oz1m/jSCfUFlMF21siqnlxywbWRGVEBEZUEKAR1r9HPHGk2UkGq28TF4dzQRjdkLv+XAIxkLjg44x2GBXAab4fs9Q0ttM1FYjaq38ajftIJUnj0444/pqsZiVG3M3b+rabdCHhqDesVr2X6H5vprd8dMi0O2LWdpGXLQ27mOJywGPMRMIdgyEAHG5u5rXuL4w3Cv8rKNrEMOnGWPvkV9C+N/gmYCb7TEAjYL8ie/HTsPXHtXjWueDL+1aS5b5REis7FeFC4GDjpk8DpmslUUrXNHBx2OWsrJ/El/HbRwvcrvMkkSA5aOPkj5ecbBzjoK3NMsLmbS5Nd0qaVIL63khVoQuZFiYALvOGG9JD0HHTPGa7PTPBtxp2g3PiC/XYfJZ1AYo8kqYG3K44OcFeARweM1t6F4WdbxLm1dZLRGjRHkiwGbyg53AELudHPzDCsUC10KKSt/X9f5HPK+5w0WgSf6MNPl3rHh3jjBCsseEZQTnGwfeQHuCK6X/AIRae1gL27wvbPiNXTHysmGAB9geT7Y7V6XonhjVrTWY5bMQhJNPnkWOCNpXE8aqZ41C5y0fl5JI25PHArVPhySzRvD90jwtdW5u4lCZ2uwbKkDjkOwODgdfaq5+n9f1oKMPuPL7XQEkn2oPMUgHA5JQEbgO2cZwPXiujsdBt7rTo7oJ+8kiCPleAzcHHYdP8K77TNJmvYmsp40hkMP2mIx/KiqwG5D7njaewr0Ky8PoLdHWMRRvs+Qvu5GAD26k8eg9MVlUehpTR83al8P7Z1GpWkeZlQRuDwBg/h+eMYqaTwxPZWlxcxqxhg2F+MhVc7Rn0Ge9fVC6DppMiSO6NcDyt7LwWA7D6nH61z0XhyzvdGeG5YRib90hbCK0g5UH2yODj8qw5mbcqPnC2tl0G7ihmkUm8lZjGBt2KFHzg9ME8Feo4PSu9ispLhAOgYdDwMAc/wAs8VN408Ff2z4Zkj0iIjU7I+fGgwD5SKWP5jOf09Ki0BLXVPDljqV4jGKZWAk6ZbIIxx2XsOvGMDiqumidmXtPkU2LqkmY7cb9knIdepVR61qRSywC6sA+63lIHGQG2/MuR144wPbNZ66PexXcVtPEG4Yb24yhxtOD+fT6Vrafp7Z+y+XxtwhzlSwGcH36iouikh9jHJqn7rT4g05bES7v3nC9eoXBHU9PQ1z5t7h7e58obTGMzbcH90O+B29TjH6V1EkWr31jJdCHCBjGQeQQFDED6ZHAXByay9FtnsbZ2uY4dk26MvsKsN2O5JJHHI6d8UtA1PGPEPg6O0ZdYsBukIyeOv09OM59a891j4f6B4ktI1aMR+ZlHCqAVbPbp27e1fUWoaTHFc/ZPPaKaNgWiWNlCHoGCt1z1zj8K5my0Kxt7p1tR5ErqWZGwcgnpjuOu7HOMEdKqL7EtHp3wX+B/iv45W+oalZeLLW21C0WMPpsWntDJdM2IIjDIziJ3jVd0kKbZVjXeA54r6d8e/sU/BjSPgvqmrWlrMPEH2N2tr57+5Ja8CcO0Ct5b5C/6pVCYwOBXw200ljBdwxy/ZTqY8t5YnaICWI74WDL8ysjDIYHIyMEV63qf7Tv7Utz8P28DeG9Y01NRnsBb3V/bxmPUZLeaNomAyWSOQ95I1XIA27Qa5q2GqTlCcKvKlurNLT/AAx/CX39uuhiqdOEoSp8z6bf+3P/ANJ+7Y+BbL4feLfE+gnxpolxp8NtdhbhoVunE0Kqqnf5SqDt5wpBGD9Kh0nxW3h/UnudXt4LpB5QeQbWeIoTuZTxy64AJPynn5sba7PwR8LfiPc6/aeFrbT1W/1BhDaRI4GViRpWBHCIqxoTkkDC/QH0DSLDUDpkfibw/wDYRJBILuN2+ZZlKhdpyPnglHDLjKE7hjANd7qLpqvw/BeRwcr66f16nzTpvirTbXW5tRnszJbylgsLIjxSLN/rUm3HvhGUrj5t3QHFfW3wA+C/jP8Aau+LP/CE/CTRmt7ySJrplkmMcamAIAAWbZEkaAAscs3Xriud1PwDH8QdRt/Fng/TrHw7DF/o17DeyDaWfIjV04JKfcEyj5gRuGBX6h/8E99W8QfCjwn4m+Cmm6TpGrP41kVTrFz5izWiRxBMJIgwqDH3Tj5iTzWVeq+W0dPPXbrbSzfRLvbbda4eKcm3rbpp+Oqsur8lp2Pyk+JXw78SeG/Ht3oHiK1ihvNLkMDyWsodCVOMIw4Za5G20u1s7h7dIXEsg5bPRvWv2s/aG/Yd1LT5rLxXczWoCSkTQW8m7zR/stXyRrX7IPjWWW51LS4IbO3mHyebLuOK4o5hBJKro/Q9F4JvWlqj8/742Vhpcj6ddFbiBkJjIKsM8ZU/4VzLWds2kLtYyyySDPl9yele9fEz4Y65oF+NN1W4a9a3jCb4o/l46Cl8CfDLUNT0+513SIXnTTyHkZcDyx9Opx7Cu/20eVOJweyknaRyXhzUdT0+3uvD9lAIYtQhe2minjUlon+8o3jK5x2wR2rL1n4f33h+8TUdChXUdPlmj8+2Y+VKygjftx8ocqMKexA7DFeqal4Qg1y/XURdulwuSWPTJrvtF+HnxKt/DEmvWVo+p6PasBJfRqNsT54B5z+mKzVaK20/AqVFvc47QfhVrXjTSL7xHoCi2t7C+isNZt7tE821tblkSO6l+Ub4YVAS7aNnKjbJgREtW5bsBYSaX4U0mzjn0m5a0E1pOJ/tcMj7IVBwocOflXHUPGQoyMenWln9s0XR/DN5byJdSam90LxYTMbWZEJDfJtkEUkIMUioTnghc5z5Z4B+IV78LNTu5PEWkafOdSsY5rJ9RQ3cLaYzDf5bx/8AHxGEUqVK7sAcRvjPUvhUla/4JfJPt8tDgcJc7hbT/hvNL+mfTPgDwRLp2g6FfeK/Cttqun2N9GskkF82n3O25eNo7G6VipAaSP8AcT4UxPvhIVlAb3PxPoF54t1bd4ta40ZyJLGytzHEuo6XHuLQ2xupEXKwth4nnTDbeGR1IrE8c3uofs6av4mOlxab4ksmtoY2aXUEuVn0fxJH55lW6COLmxkdfKjmMazW8m7fvXJr9CtU8J2DeC/DltNe2+geH/FllaReCPGN5psGoajYzzgSrp1/cwShJoLpMww3K7hMEVJCtyqPK1RastPmtbbrRX73aSvs9VYy9tCS52tNtNVdrb+l3sfmtb6342+CX234dfFbR5Zr611K21O7/sx/KjudyYOVkwIJ3OOCcblXD4+auz8D/E6H4D+C49R8V6HrXiLSLyaP7DqiJHHa6drV0G3QyupZ1Ux/6l9qnzFYHccY7+fRPh54k8daTZfFvWv7Juhby6fqa+VI/kW9tL5MM1iSM3FvE7YurJsPbJ88ZwEB82+LUPxD0vT9PsdNki8MeFfH1qr2Gr2bfatP1mPTpgmLaZHKnLL5sXnBZSp+6ho95SSqR91d76vXRJNX66LRLRrUaUNOR+82tuy+Ttorq2uisf/S/FbVLO+0HVxoEcv2dpZhJGcE+SCmHHXhQeQucDAxxzTha2qTQyTzQmGyEZO4Ebt0iR8kn5VUMee3WpJbyKxumRtx/eM42MdvlryABgHngY/2ccA1zepXMFnZXAv1YkOBHhlK7zyFOOflYZ4HAz615kYrT/gI9HmtdfIxtHgaWxl+zxiWFJMB/meLZCPXptHv0BFbt7JAkkN1CriC4j2kN8zMy/eAOAO/A7flWPbLrN/p7Jp1vJO7wztD5cbIrSRpuOB0PAJK46Ct2XUNPbwPofiq5guHSVrmzaYooiedUVyYsMQMK247un0xUuK6Nf1p+n/ANVLy0/r9DitYsoob2N7R49gaUerIFbAzgdgMgcgA1maXoGmeJdYsfD2qQrp8D3Udtdec5bzGj4WRh95f9YcgYxjjmvQdY08Q6FbaxIDZX8PyXCzBk3wvjyZFONoxgDAznhj6VXF5D4H1u31p/Juv+JjHeNHJZM89zBPEIn/fbtkYt8hwpG6Q/MOQ1VGCb5f6+/b+vJkzk4x5l/Xy062S/wAj54vtGstL0RdB0gx3szwtkxLvCyRyESoMruOwLvY42ngdBU9tFqmoarpVwYI7wMskuoQrLskdrfzxtXaWMTIj7NoUts6Y3ZHdWOiNpWp6HG2s2b2kHhhZre6H3ltGRmjiuWRVZXIzG8TK0o8wFhxivJ/E3xTkvrmfRvCNjaR6SJo1t5EDGZY7WaZozHwuyMrJtWJhkRjLEtwutmou+n3/AOXT5fqZXvL3VfTpbt2vp0/y6Hp/ww8Pat8PNMs/iDpE9lf6hYags1rZbv3yW95G6yPtbmMFA6BsndyDjFcH4U82y0RNVsNQliurVEWCQDKrlT5q9TyVP7s4+ZGbdg15RrV5rs/2LT/EOoz35gnjuLd5cIQI1wqI0aoVXr8h4617T4dn0S70uLSNXuEVNTnBZ7dVUyNc5Usm7CI6KMKOFHy59Kas9I/p5L+r7W+6pPl1aS/pv+rd9j0G98OpoV5a6g80VzDqGmxXi+RIWVElByhGFG9GGxlGQh4ycVrwTRi7ksWYS24LxRzhgFmVMY2leuSOCQK5e20fU57CGC6bbHCGlti5LJGkhY+XFkZwp/iOMseBV2ysrNEivrTD7m8vaWJmL7DwB6cZHGB9ayel+39fkWnc6uW981WvbZEeXTiLiSNvnOzcFye20tjqOh+lZuqa8uqajLeSQgTu4MpPzMJA+7dntuGAe3pise11yaOdrPSo0v5NQH2URBgufNddijHVt2Ag5/DiuD065kadrW4IS7LMHBXYgcPgp1OGX39O1ZqCtqi+bXQ9GvtStQ4kjjRQNzIOPlDH7pOO3Q56V4jqtrpui2clraJF/Z8g3xRIWLRbDkRt02nrjH8OB2Feg29pv/0aVcS7mwrAFTnsfUDtXNWWg2EV+b2OOOBpDgmNG3bgOCeSM5HpUwcUOadrGnFCPslpdXbTTh4VMFwn7wqpPCMm7cCpB4zkU+xmv7uLyJhGZVO7Mfyj3bB784xXOadpkwImZwskMjJMp++Sw+Vs8Fh6A9M12VxJp9qQMMY2RXjAXc0b5GRnt3/lRPyCGm5asrCGedbk3KwxvIcDHzBiDyOnGenOBUV7pYmLvvYDd/yz6sMZJx2Ham2JuxJ/Z8oQLOmd69GA6j2/+tSWk97c2qxQKwki3JgDh/Ug/TtWdtNzX5FOz0uzvUnWaQmV2jy8h3SugGBhs9unGOM/SqWp2bOmAC0sQwDnB2Eew/h/lxW/Iml2Pl3U4G1XAHlDe2D3x146cdDWnqun39ratq7MInKxSAOpVmVsjK9jtIw3pSV9BWjseLSWE91byQPHJKdykAH5ZMHpjHHsR2psem6Xa3JeGXybt1VVkc7Sdy5MYA6H+7jg46V02oBNNVL1HwJGDxFTkRnPOQMY9u1c/b6v4ZtbtdR1k29zDDD5vlzbjFKydFKDkNzxg9RXRCLexjJpGtPpkepxCC4jN5Eybd/Kna4wR2POcEVr+HfDPhXTNPniiEgLYaNXbzNrYwU9duB371ylrrEWmPFe42WlzmRPLyfLRu3/ANbtiuq/tCZ7VrawUTRuMtKB3xkDHrisnD7i1JLY5++0bRPEgSBoS0sUbLA7gbnjcgEAjqP5dq/b/wDZp+GPhr4WeCbj4d69MNZtNSsRc3F0sQkEUwQDYWA4znjpyK/Oz4G/Cn4e6rf2/wAQvHmtvpNnoBS6MFqVWTc59W/hAzkAdSK/ou/Yk0vV/Hml3Hgr4ZQ2lro3iH/SJry/XzbtbdflLiLA4JwFDkD27UnCWk7e75/okm30tZWuL2sVeF9f667fLc/M6W8sLu0t7iKIw6dF8kDMcb8cA47dK+NP2kf2orTwHD/YunL9rvNu1Io8bVHv6V91f8FPtA8Bfsy6ta/Db4f64mr3i5ed1dCy/VU+716V/OF491ubV9akuSxkmkOXZu9c39lyhWcsRGz7P8D0lmcalGPsXp3Rb1D4v+OfGeqSNqMgBc8RxrgAegrsPBlp8QLaO5/4R2V4vtC4kUHGRXM/BLwzLqvjO3uL1cwb9p9Oa/WVPhN4fn0uM2K+TJtBDLxTxOOVCSSWnkGHwntoNn5V6la+OtOtZEu7dkGMbscVveBfjJ8QPCPgPUfh9DdObLUX3NGCeSce+P0r71174P37WLW/m+YnbIr4X+Ing3VPD+psGh2onQgVeHx8G703r6WIrYFrSotCfwxruuNfQnV2n+zu48zZ821TxnHfHp3HFffPgvwF4G8U/s023wxTWbQeNLbWrm+8Ozxwt5enXAKzRTeWAXWKVh5c4+ZMEkrgV8A+F/GS2SrHdR8jA6V6f4T8Of8ACQfELTVvdVudKtruXHn2rbHiZhgEH0PQ+1awrpSXtlddEvRrb57aHNiMK5Qapu36bf5H1Lr/AO01+z5rGkeH9Ksre5+GHj/w7fSw3FxHaRzpJb3zsmpQJ5eYp7aVmaRBtG4YdRuGR2v7OMPibWvCH/Ckv2a9R1/xz4r0xbi20DTbeV3gi0xWAmT7HP8Au5Iyi7s5Eqf8s/mrxr4maLdfs2eIryy1DQ7PV9O8UaONNX7eomRSrZ3xOMeXKOq//Wr6S/ZV+PHwy+Gvw58N/EMeKb3QPEPgq7uSklrtS7tklYnYjYJK7sHa2VI4x0r1F7SLisLDleyV3ta/vRXLfV/Dz8t10Wh4zdO0pVXdfL7k7NpadFez0PfPgHo/w1+FvxZHh2/u4z428JaAus2Frru64GrM7fNDFKx3Q3UGxoJTgl42Bb5hx2nw18BeA/iJ4N8a/DvXdNm0/wAPXWrz65a6Vd3e+Xw09wxlmeAn/j5tZWJ3BPnTd0x93xD9rH9p74TfHq30jxn8V9XtpvHdzp1wmm63p8C2s0UxcOFu0jwGYEAq/wBR9foL4Lftq+Gvt9tF8QfCOn6vp9hpUaSz2o2mWdRxcQk/dkH8Qzg5xSnhvZyjt73K27tOVko9el22r28vcvdwrOcZPrG6SS0Wrem3ZLTXp1sv/9k=", + "productIdentifier": [ + { + "scheme": "https://id.gs1.org/gtin", + "identifierValue": "0105012345678900", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://id.gs1.org/gtin/05012345678900/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/batch", + "identifierValue": "BATCH-2024-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/batch/2024-001/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/item", + "identifierValue": "TRF-24-0001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/item/TRF-24-0001/binding" + } + } + ], + "classification": [ + { + "scheme": "https://www.unspsc.org", + "classifierValue": "50383710", + "classifierName": "Cherriess", + "classifierURL": "https://www.unspsc.org/search-code/50383710" + } + ], + "modelName": "Black Cherries", + "description": "Premium Black Cherriess harvested from our sustainable Cherries orchards.", + "furtherInformation": "https://Cherriesfarm.example.org/products/black_perigord", + "manufacturedDate": "2024-01-15", + "dimension": { + "weight": { "value": 50, "unit": "GRM" } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://www.gs1.org/gpc", + "classifierValue": "10005953", + "classifierName": "Cherriess (Fresh)", + "classifierURL": "https://www.gs1.org/gpc/10005953" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "characteristic": { + "variety": "Tuber melanosporum", + "grade": "Extra", + "aroma": "Intense, earthy", + "flavor": "Rich, complex" + }, + "manufacturer": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-5678", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/5678/binding" + } + } + ], + "name": "Cherries Orchard", + "location": "https://Cherriesfarm.example.org/locations/perigord_orchard", + "operatedBy": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + } + } + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/linkResolver", + "destinationPath": "/traceabilityInformation/0/eventReference" + } + ], + "dummyFields": [ + { + "path": "/traceabilityInformation/0/eventType", + "data": "transaction" + } + ], + "generationFields": [] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Agriculture

Business identifier
75 859 224 235
Location
Rooty Hill, NSW
Identity verification
75 859 224 235
Other evidence

Conformity credentials

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Harvest Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Cherries Product Passport", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/productIdentifier/0/identifierValue" + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "CherriesFarm_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Move to Next Facility", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "CherriesFarm_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Farm", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "CherriesFarm_dpps", "keyPath": "/epcList/index/name" } + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "fumigation_and_freight_forwarding_facility_transaction_event", + "objectKeyPath": "/vc/credentialSubject/eventID" + } + ] + } + ] + } + ] + }, + { + "name": "Airport Terminal Facility", + "type": "producer", + "assets": { + "logo": "Cherries-farm-logo.webp", + "brandTitle": "Airport Terminal" + }, + "styles": { + "primaryColor": "#b5651d", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "fumigation_and_freight_forwarding_facility_transaction_event", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "image": "data:image/jpg;base64,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", + "productIdentifier": [ + { + "scheme": "https://id.gs1.org/gtin", + "identifierValue": "0105012345678900", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://id.gs1.org/gtin/05012345678900/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/batch", + "identifierValue": "BATCH-2024-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/batch/2024-001/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://Cherriesfarm.example.org/item", + "identifierValue": "TRF-24-0001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://Cherriesfarm.example.org/item/TRF-24-0001/binding" + } + } + ], + "classification": [ + { + "scheme": "https://www.unspsc.org", + "classifierValue": "50383710", + "classifierName": "Cherriess", + "classifierURL": "https://www.unspsc.org/search-code/50383710" + } + ], + "modelName": "Black Cherries", + "description": "Premium Black Cherriess harvested from our sustainable Cherries orchards.", + "furtherInformation": "https://Cherriesfarm.example.org/products/black_perigord", + "manufacturedDate": "2024-01-15", + "dimension": { + "weight": { "value": 50, "unit": "GRM" } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://www.gs1.org/gpc", + "classifierValue": "10005953", + "classifierName": "Cherriess (Fresh)", + "classifierURL": "https://www.gs1.org/gpc/10005953" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "characteristic": { + "variety": "Tuber melanosporum", + "grade": "Extra", + "aroma": "Intense, earthy", + "flavor": "Rich, complex" + }, + "manufacturer": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-5678", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/5678/binding" + } + } + ], + "name": "Cherries Orchard", + "location": "https://Cherriesfarm.example.org/locations/perigord_orchard", + "operatedBy": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Cherries Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + } + } + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/linkResolver", + "destinationPath": "/traceabilityInformation/0/eventReference" + } + ], + "dummyFields": [ + { + "path": "/traceabilityInformation/0/eventType", + "data": "transaction" + } + ], + "generationFields": [] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" }, "dpp": { "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], @@ -705,13 +4430,15 @@ } ], "type": ["VerifiableCredential", "DigitalProductPassport"], - "dlrLinkTitle": "Truffle Product Passport", + "dlrLinkTitle": "Cherries Product Passport", "dlrIdentificationKeyType": "gtin", - "dlrVerificationPage": "http://localhost:3001/verify" + "dlrVerificationPage": "http://localhost:3003/verify" }, "dlr": { - "dlrAPIUrl": "http://localhost:8080", - "dlrAPIKey": "5555555555555" + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "storage": { "url": "http://localhost:3334/v1/documents", @@ -734,7 +4461,7 @@ "name": "mergeToLocalStorage", "parameters": [ { - "storageKey": "truffleFarm_dpps", + "storageKey": "CherriesFarm_dpps", "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" } ] @@ -742,14 +4469,14 @@ ] }, { - "name": "Sell Truffle", + "name": "Move to Next Facility", "id": "transaction_product", "components": [ { "name": "LocalStorageLoader", "type": "EntryData", "props": { - "storageKey": "truffleFarm_dpps", + "storageKey": "CherriesFarm_dpps", "nestedComponents": [ { "name": "JsonForm", @@ -1110,8 +4837,8 @@ { "path": "/sourceParty", "data": { - "id": "did:web:0e37-27-32-93-137.ngrok-free.app", - "name": "Truffle Farm", + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Farm", "identifiers": [ { "scheme": "https://example.com/scheme/source", @@ -1128,8 +4855,8 @@ { "path": "/destinationParty", "data": { - "id": "did:web:0e37-27-32-93-137.ngrok-free.app", - "name": "Truffle Processor", + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Cherries Processor", "identifiers": [ { "scheme": "https://example.com/scheme/destination", @@ -1175,7 +4902,7 @@ { "vckit": { "vckitAPIUrl": "http://localhost:3332/v1", - "issuer": "did:web:0e37-27-32-93-137.ngrok-free.app" + "issuer": "did:web:450e-103-69-79-17.ngrok-free.app" }, "epcisTransactionEvent": { "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], @@ -1188,11 +4915,13 @@ "type": ["TransactionEventCredential"], "dlrLinkTitle": "Transaction Event", "dlrIdentificationKeyType": "gtin", - "dlrVerificationPage": "http://localhost:3001/verify" + "dlrVerificationPage": "http://localhost:3003/verify" }, "dlr": { - "dlrAPIUrl": "http://localhost:8080", - "dlrAPIKey": "5555555555555" + "dlrAPIUrl": "http://localhost:3000", + "dlrAPIKey": "test123", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "storage": { "url": "http://localhost:3334/v1/documents", @@ -1208,7 +4937,7 @@ } }, "identifierKeyPath": "/eventID", - "localStorageParams": { "storageKey": "truffleFarm_dpps", "keyPath": "/epcList/index/name" } + "localStorageParams": { "storageKey": "CherriesFarm_dpps", "keyPath": "/epcList/index/name" } } ] } @@ -1219,7 +4948,8 @@ ], "identifyProvider": { "type": "gs1", - "url": "http://localhost:3333/products" + "url": "http://localhost:3001", + "namespace": "gs1" }, "defaultVerificationServiceLink": { "title": "Default Verification Service", diff --git a/app-config.truff.json b/app-config.truff.json new file mode 100644 index 00000000..bab932cc --- /dev/null +++ b/app-config.truff.json @@ -0,0 +1,1232 @@ +{ + "name": "Truffle Value Chain", + "styles": { + "primaryColor": "rgb(35, 138, 186)", + "secondaryColor": "black", + "tertiaryColor": "black" + }, + "generalFeatures": [ + { + "name": "General features", + "type": "", + "styles": { + "primaryColor": "rgb(35, 138, 186)", + "secondaryColor": "black", + "tertiaryColor": "black" + }, + "features": [] + } + ], + "apps": [ + { + "name": "Truffle Farm", + "type": "producer", + "assets": { + "logo": "truffle-farm-logo.webp", + "brandTitle": "Truffle Farm" + }, + "styles": { + "primaryColor": "#b5651d", + "secondaryColor": "#391561", + "tertiaryColor": "#ffffff" + }, + "features": [ + { + "name": "Issue DPP", + "id": "produce_product", + "components": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "Product": { + "type": "object", + "additionalProperties": false, + "properties": { + "productIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of unique identifiers assigned to the product or model. " + }, + "batchIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "Information regarding the specific production batch of the product." + }, + "itemIdentifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "An array of identifiers representing a specific serialised item of the product." + }, + "classification": { + "type": "array", + "items": { + "$ref": "#/$defs/Classification" + }, + "description": "A code representing the product's class, typically using the UN CPC (United Nations Central Product Classification) https://unstats.un.org/unsd/classifications/Econ/cpc" + }, + "modelName": { + "type": "string", + "description": "The model name or number of the product, represented as text." + }, + "image": { + "$ref": "#/$defs/BinaryFile", + "description": "A unique identifier (URI) pointing to an image of the product." + }, + "description": { + "type": "string", + "description": "A textual description providing details about the product." + }, + "furtherInformation": { + "type": "string", + "format": "uri", + "description": "A URL pointing to further human readable information about the product." + }, + "manufacturedDate": { + "type": "string", + "format": "date", + "description": "The ISO 8601 date on which the product batch was manufactured." + }, + "dimension": { + "$ref": "#/$defs/Dimension", + "description": "The physical dimensions of the product. Not every dimension is relevant to every products. For example bulk materials may have wieght and volume but not length, with, or height." + }, + "characteristic": { + "$ref": "#/$defs/Characteristic", + "description": "" + }, + "manufacturer": { + "$ref": "#/$defs/Party", + "description": "The Party entity that manufactured the product." + }, + "manufacturedAt": { + "$ref": "#/$defs/Facility", + "description": "The Facility where the product batch was manufactured." + }, + "materialsProvenance": { + "type": "array", + "items": { + "$ref": "#/$defs/Material" + }, + "description": "An array of Provenance objects providing details on the origin and mass fraction of components or ingredients of the product batch." + }, + "conformityClaim": { + "type": "array", + "items": { + "$ref": "#/$defs/Claim" + }, + "description": "An array of claim objects representing various product conformity claims about the product / batch. These can be sustainability claims, circularity claims, or any other claim type within the conformity topic list." + }, + "recyclingInstruction": { + "type": "string", + "format": "uri", + "description": "A URI pointing to information regarding the recycling aspects of the product." + }, + "traceabilityInformation": { + "type": "array", + "items": { + "$ref": "#/$defs/TraceabilityEvent" + }, + "description": "An array of TraceabilityEvent objects detailing EPCIS events related to the traceability of the product batch." + } + }, + "description": "The ProductInformation class encapsulates detailed information regarding a specific product, including its identification details, manufacturer, and other pertinent details." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Classification": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "Classification scheme - eg https://unstats.un.org/unsd/classifications/Econ/cpc " + }, + "classifierValue": { + "type": "string", + "description": "classifier value within the scheme - eg \"01211\" in UN CPC" + }, + "classifierName": { + "type": "string", + "description": "Name of the classifier - eg \"Asparagus\" for code \"01211\" in UNCPC" + }, + "classifierURL": { + "type": "string", + "format": "uri", + "description": "Linked data URL to a web vocabulary entery for this classificaiton code. When this property is provided, the scheme, value, and name properties of the classifer are not required. eg https://vocabulary.uncefact.org/unlocode#AUBNE represensign the port of Brisbane in the UN/LOCODE classification scheme." + } + }, + "description": "A classification scheme and code / name representing a category value for a product, entity, or facility." + }, + "BinaryFile": { + "type": "object", + "additionalProperties": false, + "properties": { + "fileHash": { + "x-jargon-isKey": true, + "type": "string", + "description": "The MD5 hash of the file." + }, + "fileLocation": { + "type": "string", + "format": "uri", + "description": "The location of the evidence file." + }, + "fileType": { + "type": "string", + "x-external-enumeration": "https://mimetype.io/all-types", + "description": "The type of file, represented as a MIME type.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://mimetype.io/all-types\n " + } + }, + "description": "A file representing a data snapshot that is used to infomr the conformity assessment." + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "weight": { + "$ref": "#/$defs/Measure", + "description": "the weight of the product" + }, + "length": { + "$ref": "#/$defs/Measure", + "description": "The length of the product or packaging" + }, + "width": { + "$ref": "#/$defs/Measure", + "description": "The width of the product or packaging" + }, + "height": { + "$ref": "#/$defs/Measure", + "description": "The height of the product or packaging" + }, + "volume": { + "$ref": "#/$defs/Measure", + "description": "The displacement volume of the product." + } + }, + "description": "Overall (length, width, height) dimensions and weight/volume of an item." + }, + "Measure": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "number", + "description": "The numeric value of the measure" + }, + "unit": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "Unit of measure drawn from the UNECE rec20 measure code list.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The measure class defines a numeric measured value (eg 10) and a coded unit of measure (eg KG)." + }, + "Characteristic": { + "type": "object", + "additionalProperties": false, + "properties": {}, + "description": "Product specific characteristics. This class is an extension point for industry specific product characteristics or performance information such as clothing size or battery capacity." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Facility": { + "type": "object", + "additionalProperties": false, + "properties": { + "identifier": { + "type": "array", + "items": { + "$ref": "#/$defs/Identifier" + }, + "description": "A unique identifier (URI) assigned to the facility. (Link Resolver - GS1 GLN?)" + }, + "name": { + "type": "string", + "description": "The name of the facility, represented as a text string." + }, + "location": { + "type": "string", + "format": "uri", + "description": "" + }, + "operatedBy": { + "$ref": "#/$defs/Party", + "description": "The Party entity responsible for operating the facility." + } + }, + "description": "The physical site (eg farm or factory) where the product or materials was produced." + }, + "Material": { + "type": "object", + "additionalProperties": false, + "properties": { + "originCountry": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/CountryId", + "description": "A ISO 3166-1 code representing the country of origin of the component or ingredient.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/CountryId\n " + }, + "materialType": { + "$ref": "#/$defs/Classification", + "description": "The type of this material - as a value drawn from a controlled vocabulary eg textileexchange.org/materials/rm01014 - representing organic cotton." + }, + "massFraction": { + "type": "number", + "description": "A numeric value representing the mass fraction of the product represented by this material. The sum of all mass fraction values for a given passport should be 100." + }, + "recycled": { + "type": "boolean", + "description": "Indicator is true if this material input is from a recycled source." + }, + "hazardous": { + "type": "boolean", + "description": "Indicates whether this material is hazardous. If true then " + } + }, + "description": "The material class encapsulates details about the origin or source of raw materials in a product, including the country of origin and the mass fraction." + }, + "Claim": { + "type": "object", + "additionalProperties": false, + "properties": { + "topic": { + "type": "string", + "enum": [ + "environment.energy", + "environment.emissions", + "environment.water", + "environment.waste", + "environment.deforestation", + "environment.biodiversity", + "circularity.content", + "circularity.design", + "social.labour", + "social.rights", + "social.community", + "social.safety", + "governance.ethics", + "governance.compliance", + "governance.transparency" + ], + "example": "environment.energy", + "description": "A code representing the topic of the sustainability claim. E.g. environment.deforestation, environment.ghg-emission-intensity, etc.. Drawn from a standard code list. " + }, + "standardOrRegulation": { + "type": "string", + "format": "uri", + "description": "The standard or regulation against which this conformity claim is made. Expressed as a URI and should match a value in the UN catalogue of reference vocabularies. " + }, + "criteriaReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the specific criteria within the standard or regulation against which this claim is made." + }, + "claimedValues": { + "type": "array", + "items": { + "$ref": "#/$defs/Metric" + }, + "description": "One or more actual measures supporting the claim. For example for GHG emissions there may be a metric for total emissions intensity and also a metric for amount of offsets included." + }, + "benchmarkValue": { + "$ref": "#/$defs/Metric", + "description": "A benchmark value against which the claimed value can be assessed. THis could be a value specified by a standard or regulation or could be an industry benchmark." + }, + "benchmarkReference": { + "type": "string", + "format": "uri", + "description": "A refernce to evidence to support the benchmark value." + }, + "conformance": { + "type": "boolean", + "description": "and indicator (boolean) that expresses whether or not this product has achieved compliance against the criteria. for example, if the topic is environment.deforstation and the criteria is EU.2023.1115 then the product is conformant if it has not touched any facility throughout it's lifecycle that is not deforestation free since dec 2020." + }, + "conformityEvidence": { + "$ref": "#/$defs/Evidence", + "description": "A URI pointing to the evidence supporting the claim. Most likely in the form of a verifiable credential." + } + }, + "description": "The SustainabilityClaim class represents specific claims regarding the sustainability of a product, providing details about the metrics, thresholds, and evidences supporting the claim." + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "A human readable name for this metric" + }, + "value": { + "$ref": "#/$defs/Measure", + "description": "A numeric value representing the measurement or evaluation outcome for the claim." + }, + "accuracy": { + "type": "number", + "description": "A percentage represented as a numeric between 0 and 1 indicating the rage of accuracy of the claimed value (eg 0.05 means that the actual value is within 5% of the claimed value.)" + } + }, + "description": "A specific measure of performance against the criteria that governs the claim. Expressed as an array of metric (ie unit of emasure) / value (ie the actual numeric value) pairs. " + }, + "TraceabilityEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "eventReference": { + "type": "string", + "format": "uri", + "description": "A URI pointing to the detailed information about the EPCIS event. Most likely in the form of a verifiable credential." + }, + "eventType": { + "type": "string", + "enum": ["aggregation", "transformation", "object", "transaction", "association"], + "example": "aggregation", + "description": "A code representing the type of EPCIS event. ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, ObjectEvent." + } + }, + "description": "The TraceabilityEvent class represents a specific EPCIS event in the traceability chain of a product, including details about the event type and reference." + } + } + }, + "data": { + "image": "data:image/jpg;base64,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", + "productIdentifier": [ + { + "scheme": "https://id.gs1.org/gtin", + "identifierValue": "0105012345678900", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://id.gs1.org/gtin/05012345678900/binding" + } + } + ], + "batchIdentifier": [ + { + "scheme": "https://trufflefarm.example.org/batch", + "identifierValue": "BATCH-2024-001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://trufflefarm.example.org/batch/2024-001/binding" + } + } + ], + "itemIdentifier": [ + { + "scheme": "https://trufflefarm.example.org/item", + "identifierValue": "TRF-24-0001", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://trufflefarm.example.org/item/TRF-24-0001/binding" + } + } + ], + "classification": [ + { + "scheme": "https://www.unspsc.org", + "classifierValue": "50383710", + "classifierName": "Truffles", + "classifierURL": "https://www.unspsc.org/search-code/50383710" + } + ], + "modelName": "Black Truffle", + "description": "Premium Black Truffles harvested from our sustainable truffle orchards.", + "furtherInformation": "https://trufflefarm.example.org/products/black_perigord", + "manufacturedDate": "2024-01-15", + "dimension": { + "weight": { "value": 50, "unit": "GRM" } + }, + "materialsProvenance": [ + { + "originCountry": "AU", + "materialType": { + "scheme": "https://www.gs1.org/gpc", + "classifierValue": "10005953", + "classifierName": "Truffles (Fresh)", + "classifierURL": "https://www.gs1.org/gpc/10005953" + }, + "massFraction": 100, + "recycled": false, + "hazardous": false + } + ], + "characteristic": { + "variety": "Tuber melanosporum", + "grade": "Extra", + "aroma": "Intense, earthy", + "flavor": "Rich, complex" + }, + "manufacturer": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Truffle Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + }, + "manufacturedAt": { + "identifier": [ + { + "scheme": "https://identifier.example.org/facility", + "identifierValue": "FAC-5678", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/facility/5678/binding" + } + } + ], + "name": "Truffle Orchard", + "location": "https://trufflefarm.example.org/locations/perigord_orchard", + "operatedBy": { + "id": "did:example:123456789abcdefghi", + "name": "Gourmet Truffle Farm", + "identifiers": [ + { + "scheme": "https://identifier.example.org/company", + "identifierValue": "COMP-12345", + "binding": { + "type": "document", + "assuranceLevel": "3rdParty", + "reference": "https://identifier.example.org/company/12345/binding" + } + } + ] + } + } + }, + "className": "json-form", + "style": { + "margin": "40px auto", + "paddingTop": "40px", + "width": "80%" + } + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": {} + } + ], + "services": [ + { + "name": "processDPP", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "dpp": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/dppld.json"], + "renderTemplate": [ + { + "template": " Digital Product Passport

PRODUCT PASSPORT

{{credentialSubject.modelName}}

{{#each credentialSubject.batchIdentifier}} {{/each}} {{#each credentialSubject.productIdentifier}} {{/each}}

Sustainability

100%

Confidence

100%

PASSPORT ISSUED BY

{{issuer.name}}

Industry

Agriculture

Business identifier
75 859 224 235
Location
Rooty Hill, NSW
Identity verification
75 859 224 235
Other evidence

Conformity credentials

Conformity credentials are usually issued by independent third parties and provide a trusted assessment of product ESG performance against credible standards or regulations

{{#each credentialSubject.conformityClaim}}

{{topic}}

{{!-- {{#if (eq conformityEvidence.type 'w3c_vc')}} --}}
Verifiable credential
{{!-- {{/if}} --}}

View details

{{/each}}

Product composition

A complete list of materials that make up the composition of this product.

{{#each credentialSubject.materialsProvenance}}

{{massFraction}}%

ID {{materialType.classifierValue}}

{{materialType.classifierName}}

{{#if recycled}}

Recycled

{{/if}} {{#if hazardous}}

Hazard

{{/if}}
{{originCountry}}
{{/each}}

Product information

Harvest Date

{{credentialSubject.manufacturedDate}}

Batch No.

{{credentialSubject.batchIdentifier.0.identifierValue}}

Weight

{{credentialSubject.dimension.weight.value}}{{credentialSubject.dimension.weight.unit}}

Description

{{credentialSubject.description}}

", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["VerifiableCredential", "DigitalProductPassport"], + "dlrLinkTitle": "Truffle Product Passport", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000/api", + "dlrAPIKey": "test123" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/productIdentifier/0/identifierValue" + } + ] + }, + { + "name": "mergeToLocalStorage", + "parameters": [ + { + "storageKey": "truffleFarm_dpps", + "objectKeyPath": "/vc/credentialSubject/productIdentifier/0/identifierValue" + } + ] + } + ] + }, + { + "name": "Sell Truffle", + "id": "transaction_product", + "components": [ + { + "name": "LocalStorageLoader", + "type": "EntryData", + "props": { + "storageKey": "truffleFarm_dpps", + "nestedComponents": [ + { + "name": "JsonForm", + "type": "EntryData", + "props": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "TransactionEvent": { + "type": "object", + "additionalProperties": false, + "properties": { + "sourceParty": { + "$ref": "#/$defs/Party", + "description": "The source party for this supply chain transaction - typically the seller party" + }, + "destinationParty": { + "$ref": "#/$defs/Party", + "description": "The destination party for this supply chain transaction - typically the buyer party." + }, + "epcList": { + "type": "array", + "items": { "$ref": "#/$defs/Item" }, + "description": "The list of uniquely identified trade items included in this supply chain transaction." + }, + "quantityList": { + "type": "array", + "items": { "$ref": "#/$defs/QuantityElement" }, + "description": "List of quantified product classes that are included in this transaction. Used when the trade items do not have unique identifiers (eg 100 reels of yarn)" + }, + "referenceDocument": { + "$ref": "#/$defs/TradeDocument", + "description": "The supply chain document reference for this transaction event - eg the invoice, order, or dispatch advice" + }, + "eventID": { + "x-jargon-isKey": true, + "readOnly": true, + "type": "string", + "description": "The unique identifier of this event - SHOULD be a UUID" + }, + "eventTime": { + "type": "string", + "format": "date-time", + "description": "The ISO-8601 date time when the event occurred." + }, + "action": { + "type": "string", + "enum": ["observe", "add", "delete"], + "example": "observe", + "description": "Code describing how an event relates to the lifecycle of the entity impacted by the event." + }, + "disposition": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/Disp", + "description": "Disposition code describing the state of the item after the event. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/Disp\n " + }, + "bizStep": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BizStep", + "description": "A business step code drawn from a controlled vocabulary. \n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BizStep\n " + }, + "bizLocation": { + "type": "string", + "format": "uri", + "description": "A Business Location is a uniquely identified and discretely recorded geospatial location that is meant to designate the specific place where an object is assumed to be following an EPCIS event until it is reported to be at a different Business Location by a subsequent EPCIS event. The bizLocation must be a resolvable URI that links to facility information and geolocation data." + }, + "sensorElementList": { + "type": "array", + "items": { "$ref": "#/$defs/SensorElement" }, + "description": "An array (one for each sensor) of sensor device data sets associated with the event. " + } + }, + "description": "Transaction represents an event in which one or more objects become associated or disassociated with one or more identified business transactions - such as the purchase / shipment of goods between buyer and seller." + }, + "Party": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "The decentralised identifier of the party - must be a W3C DID." + }, + "name": { + "type": "string", + "description": "The name of the organization or company, represented as a text string." + }, + "identifiers": { + "type": "array", + "items": { "$ref": "#/$defs/Identifier" }, + "description": "A list of unique business identifiers assigned to the party - such as tax registration numbers." + } + }, + "description": "The Party class represents an entity such as an organization, or a company that manufactured the product." + }, + "Identifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "scheme": { + "type": "string", + "format": "uri", + "description": "the identifier scheme as defined by the registrar that manages the identifier registry. If the identifier scheme is registered with UNTP then this URI can use used to dicsover the resolution method (to get more data) and the verification method (to prove ownership)." + }, + "identifierValue": { + "type": "string", + "description": "The value of the identifier within the scheme" + }, + "binding": { + "$ref": "#/$defs/Evidence", + "description": "Link to evidence that attests to the validity and ownership of the identifer. " + } + }, + "description": "An identifier of a party, product, or facility that is defined by an identifier scheme and idenfier value and, optinally, verification evidence " + }, + "Evidence": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["w3c_vc", "iso_mdl", "document", "website", "other"], + "example": "w3c_vc", + "description": "Format of the evidence (verifiable credential, document, website, etc)" + }, + "assuranceLevel": { + "type": "string", + "enum": ["Self", "Commercial", "Buyer", "Membership", "Unspecified", "3rdParty"], + "example": "Self", + "description": "The assurance level of the evidence (self declaration, 2nd party, 3rd party, accredited auditor)" + }, + "reference": { + "type": "string", + "format": "uri", + "description": "The URL at which the evidence data can be found. " + } + }, + "description": "Evidence to support a conformity or identity claim. " + }, + "Item": { + "type": "object", + "additionalProperties": false, + "properties": { + "itemID": { + "x-jargon-isKey": true, + "type": "string", + "format": "uri", + "description": "The globally unique identifier (eg GS1 GTIN or digital link) of the product item. " + }, + "name": { + "type": "string", + "description": "The name of the product class to which the product item belongs. " + } + }, + "description": "A specific trade item /product code which could be either a product serial number or a consignment identifier " + }, + "QuantityElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "epcClass": { + "type": "string", + "format": "uri", + "description": "THe identifier of a product class (as opposed to a product instance) such as a GTIN code for a manufactured product." + }, + "quantity": { + "type": "number", + "description": "The numeric quantity of the product class (eg 100 kg of cotton)" + }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "The unit of measure for the quantity value (eg Kg or meters etc) using the UNECE Rec 20 unit of measure codelist.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "The quantity element is used to define the quantities (eg 100), units of measure (eg Kg) and product class (eg GTIN or other class identifier) of products that are inputs or outputs or the subject of supply chain events. ", + "required": ["quantity"] + }, + "TradeDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "x-external-enumeration": "https://ref.gs1.org/cbv/BTT", + "description": "The document type representing the trade transaction drawn from the business transaction type vocabulary.\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://ref.gs1.org/cbv/BTT\n " + }, + "identifier": { + "type": "string", + "description": "The identifier of the trade transaction document - eg an invoice number or bill of lading number. Must be unique for a given source party" + }, + "documentURL": { + "type": "string", + "format": "uri", + "description": "The URL of the referenced trade document. For integrity reasons, it is recommended (but not required) that the documentURL is a hashlink (https://w3c-ccg.github.io/hashlink/) so that if the document the URL is changed then the hash verification will fail." + } + }, + "description": "A trade transaction between two parties such as an invoice, purchase order, or shipping notification." + }, + "SensorElement": { + "type": "object", + "additionalProperties": false, + "properties": { + "sensorMetadata": { + "$ref": "#/$defs/Sensor", + "description": "Data that describes the physical sensor that recorded the sensor data set." + }, + "sensorReport": { + "type": "array", + "items": { "$ref": "#/$defs/SensorData" }, + "description": "A list of sensor readings from the given sensor relevant to the traceability event context." + }, + "sensorIntegrityProof": { + "type": "string", + "format": "uri", + "description": "An optional reference to a verifiable credential signed by the sensor device or device manufacturer that contains the digitally signed raw data associated with this sensor report." + } + }, + "description": "A SensorElement is used to carry data related to an event that is captured one sensor such as an IoT device. Include one sensor property and an array of sensor data values." + }, + "Sensor": { + "type": "object", + "additionalProperties": false, + "properties": { + "device": { + "$ref": "#/$defs/Item", + "description": "The device Identifier for the sensor as a URI (typically an EPC)" + }, + "dataProcessingMethod": { + "type": "string", + "format": "uri", + "description": "The data processing method used by the sensor - should reference a documented standard criteria as a URI" + } + }, + "description": "A physical sensor that records a sensor data set." + }, + "SensorData": { + "type": "object", + "additionalProperties": false, + "properties": { + "time": { + "type": "string", + "format": "date-time", + "description": "the timestamp at which the sensor reading was made." + }, + "type": { + "type": "string", + "format": "uri", + "description": "the measurement type of the sensor reading, as a URI reference to a measurement method specification." + }, + "value": { "type": "number", "description": "the sensor reading" }, + "uom": { + "type": "string", + "x-external-enumeration": "https://vocabulary.uncefact.org/UnitMeasureCode", + "description": "the unit of measure for the sensor reading\n\n This is an enumerated value, but the list of valid values are too big, or change too often to include here. You can access the list of allowable values at this URL: https://vocabulary.uncefact.org/UnitMeasureCode\n " + } + }, + "description": "A data point read by a sensor." + } + } + } + }, + "constructData": { + "mappingFields": [ + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/eventID" + }, + { + "sourcePath": "/vc/credentialSubject/productIdentifier/0/identifierValue", + "destinationPath": "/epcList/index/name" + }, + { + "sourcePath": "/linkResolver", + "destinationPath": "/epcList/index/itemID" + } + ], + "dummyFields": [ + { + "path": "/action", + "data": "observe" + }, + { + "path": "/disposition", + "data": "https://ref.gs1.org/cbv/Disp/in_transit" + }, + { + "path": "/bizStep", + "data": "https://ref.gs1.org/cbv/BizStep/receiving" + }, + { + "path": "/bizLocation", + "data": "https://example.com/warehouse" + }, + { + "path": "/sourceParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Truffle Farm", + "identifiers": [ + { + "scheme": "https://example.com/scheme/source", + "identifierValue": "SRC123456", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/source_evidence" + } + } + ] + } + }, + { + "path": "/destinationParty", + "data": { + "id": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app", + "name": "Truffle Processor", + "identifiers": [ + { + "scheme": "https://example.com/scheme/destination", + "identifierValue": "DST7891011", + "binding": { + "type": "w3c_vc", + "assuranceLevel": "3rdParty", + "reference": "https://example.com/destination_evidence" + } + } + ] + } + } + ], + "generationFields": [ + { + "path": "/eventID", + "handler": "generateIdWithSerialNumber" + }, + { + "path": "/eventTime", + "handler": "generateCurrentDatetime" + } + ] + } + } + ] + } + }, + { + "name": "CustomButton", + "type": "Submit", + "props": { + "includeDownload": true, + "downloadFileName": "transaction" + } + } + ], + "services": [ + { + "name": "processTransactionEvent", + "parameters": [ + { + "vckit": { + "vckitAPIUrl": "http://localhost:3332/v1", + "issuer": "did:web:143f-2406-2d40-4106-2b10-38c6-9732-f2d9-bb1c.ngrok-free.app" + }, + "epcisTransactionEvent": { + "context": ["https://dpp-json-ld.s3.ap-southeast-2.amazonaws.com/transaction-event-ld.json"], + "renderTemplate": [ + { + "template": "Transaction Event

TRACEABILITY EVENT

Transaction

EVENT ISSUED BY

{{issuer.name}}

{{#each issuer.identifiers}}
Industry
Needs to be replaced...
Business identifier
Needs to be replaced...
Identity verification
{{identiferValue}}
Verifiable credential
{{/each}}

Event description

Event ID
{{credentialSubject.eventID}}
Event type
Needs to be replaced...
Description
Needs to be replaced...
Time and date
{{credentialSubject.eventTime}}
Lifecycle action
{{credentialSubject.action}}
Product disposition
{{credentialSubject.disposition}}
Business step
{{credentialSubject.bizStep}}

Transaction

{{credentialSubject.sourceParty.name}}

SOURCE

{{credentialSubject.sourceParty.identifiers.0.identifierValue}}

Transferred

{{credentialSubject.destinationParty.name}}

DESTINATION

{{credentialSubject.destinationParty.partyID}}

Object list

{{#each credentialSubject.epcList}}

{{name}}

{{itemID}}

Product class name

Sustainability 0%
Confidence 0%
View
{{/each}}

Sensor

{{#each credentialSubject.sensorElementList}}
{{sensorMetadata.device.name}}
{{#each sensorReport}}

{{time}}

Data type

{{value}} {{uom}}

{{/each}}{{sensorIntegrityProof}}
Other evidence
{{/each}}
", + "@type": "WebRenderingTemplate2022" + } + ], + "type": ["TransactionEventCredential"], + "dlrLinkTitle": "Transaction Event", + "dlrIdentificationKeyType": "gtin", + "dlrVerificationPage": "http://localhost:3003/verify" + }, + "dlr": { + "dlrAPIUrl": "http://localhost:3000/api", + "dlrAPIKey": "test123" + }, + "storage": { + "url": "http://localhost:3334/v1/documents", + "params": { + "resultPath": "/uri", + "bucket": "verifiable-credentials" + }, + "options": { + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + } + }, + "identifierKeyPath": "/eventID", + "localStorageParams": { "storageKey": "truffleFarm_dpps", "keyPath": "/epcList/index/name" } + } + ] + } + ] + } + ] + } + ], + "identifyProvider": { + "type": "gs1", + "url": "http://localhost:3001" + }, + "defaultVerificationServiceLink": { + "title": "Default Verification Service", + "context": "Default Verification Service", + "type": "application/json", + "href": "http://localhost:3332/agent/routeVerificationCredential", + "hreflang": ["en"], + "apiKey": "test123" + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 9581fcff..7b1b93d4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -47,5 +47,75 @@ services: - AVAILABLE_BUCKETS=verifiable-credentials,private-verifiable-credentials,epcis-events - STORAGE_TYPE=local + identity-resolver-service: + # Replace with local or deployed image + image: ghcr.io/pyx-industries/pyx-identity-resolver:latest@sha256:71a02b8b0a2b9c7cc18d33a54060e9af4d543e34bdd6a47c3b3cf4dcadb1711e + ports: + - '3000:3000' + environment: + - OBJECT_STORAGE_ENDPOINT=identity-resolver-service-object-store + - OBJECT_STORAGE_PORT=9000 + - OBJECT_STORAGE_USE_SSL=false + - OBJECT_STORAGE_ACCESS_KEY=minioadmin + - OBJECT_STORAGE_SECRET_KEY=minioadmin + - OBJECT_STORAGE_BUCKET_NAME=idr-bucket-1 + - OBJECT_STORAGE_PATH_STYLE=true + - IDENTIFIER_PATH=identifiers + - API_KEY=test123 + - APP_ENDPOINT=http://localhost:3000 + - APP_NAME=IDR-1 + - RESOLVER_DOMAIN=http://localhost:3000 + - LINK_TYPE_VOC_DOMAIN=http://localhost:3000/voc + - PORT=3000 + depends_on: + - identity-resolver-service-object-store + + identity-resolver-service-object-store: + image: quay.io/minio/minio:RELEASE.2024-08-17T01-24-54Z-cpuv1 + command: server /data --console-address ":9090" + ports: + - '9000:9000' + - '9090:9090' + environment: + - MINIO_ROOT_USER=minioadmin + - MINIO_ROOT_PASSWORD=minioadmin + volumes: + - ./minio_data/identity-resolver-service-object-store:/data + + mock-global-gs1-resolver: + # Replace with local or deployed image + image: ghcr.io/pyx-industries/pyx-identity-resolver:latest@sha256:71a02b8b0a2b9c7cc18d33a54060e9af4d543e34bdd6a47c3b3cf4dcadb1711e + ports: + - '3001:3001' + environment: + - OBJECT_STORAGE_ENDPOINT=mock-global-gs1-resolver-object-store + - OBJECT_STORAGE_PORT=9000 + - OBJECT_STORAGE_USE_SSL=false + - OBJECT_STORAGE_ACCESS_KEY=minioadmin + - OBJECT_STORAGE_SECRET_KEY=minioadmin + - OBJECT_STORAGE_BUCKET_NAME=idr-bucket-2 + - OBJECT_STORAGE_PATH_STYLE=true + - IDENTIFIER_PATH=identifiers + - API_KEY=test456 + - APP_ENDPOINT=http://localhost:3001 + - APP_NAME=IDR-2 + - RESOLVER_DOMAIN=http://localhost:3001 + - LINK_TYPE_VOC_DOMAIN=http://localhost:3001/voc + - PORT=3001 + depends_on: + - mock-global-gs1-resolver-object-store + + mock-global-gs1-resolver-object-store: + image: quay.io/minio/minio:RELEASE.2024-08-17T01-24-54Z-cpuv1 + command: server /data --console-address ":9091" + ports: + - '9001:9000' + - '9091:9090' + environment: + - MINIO_ROOT_USER=minioadmin + - MINIO_ROOT_PASSWORD=minioadmin + volumes: + - ./minio_data/mock-global-gs1-resolver-object-store:/data + volumes: - vckit-data: \ No newline at end of file + vckit-data: diff --git a/documentation/docs/mock-apps/common/identify-provider.md b/documentation/docs/mock-apps/common/identify-provider.md index bc2748e8..98802b3e 100644 --- a/documentation/docs/mock-apps/common/identify-provider.md +++ b/documentation/docs/mock-apps/common/identify-provider.md @@ -8,7 +8,8 @@ import Disclaimer from '../.././\_disclaimer.mdx'; ## Description -The `Identify Provider` object is a key component in the Mock App system that links scanned identifiers to their corresponding [Identity Resolver Service](/docs/mock-apps/dependent-services/identity-resolution-service), understands how to communicate with such services and encapsulates logic to interpret data retrieved from data carriers. + +The `Identify Provider` object is a key component in the Mock App system that links scanned identifiers to their corresponding [Identity Resolver Service](/docs/mock-apps/dependent-services/identity-resolution-service), understands how to communicate with such services and encapsulates logic to interpret data retrieved from data carriers. It serves three main functions: @@ -26,27 +27,29 @@ For instance, when dealing with a Global Trade Item Number (GTIN) from GS1: The Mock App system can use multiple identify providers, each tailored to a specific identity registrar and service. This modular approach allows the system to work with a variety of identification standards and services. ## Example + ```json { "identifyProvider": { "type": "gs1", - "url": "http://localhost:3333/products" + "url": "http://localhost:3333", + "namespace": "gs1" } } ``` ## Definitions -| Property | Required | Description | Type | -|----------|:--------:|-------------|------| -| type | Yes | The type of identify provider, e.g., "gs1" for GS1 standards. | [ProviderType](/docs/mock-apps/common/identify-provider#provider-types) | -| url | Yes | The URL endpoint for the identify provider service. | String | - +| Property | Required | Description | Type | +| --------- | :------: | ------------------------------------------------------------- | ----------------------------------------------------------------------- | +| type | Yes | The type of identify provider, e.g., "gs1" for GS1 standards. | [ProviderType](/docs/mock-apps/common/identify-provider#provider-types) | +| url | Yes | The URL endpoint for the identify provider service. | String | +| namespace | Yes | The namespace for the identify provider. | String | ## Provider Types -| Type | Description | -|------|-------------| -| gs1 | Used for resolving (using the Mock Verified By GS1 Service)/understanding GS1-based identifiers (e.g., GTINs). | +| Type | Description | +| ---- | -------------------------------------------------------------------------------------------------------------- | +| gs1 | Used for resolving (using the Mock Verified By GS1 Service)/understanding GS1-based identifiers (e.g., GTINs). | -**Note**: The available types may be extended in the future to support additional identity providers. \ No newline at end of file +**Note**: The available types may be extended in the future to support additional identity providers. diff --git a/documentation/docs/mock-apps/common/idr.md b/documentation/docs/mock-apps/common/idr.md index 5d5ac8d0..18763c94 100644 --- a/documentation/docs/mock-apps/common/idr.md +++ b/documentation/docs/mock-apps/common/idr.md @@ -13,7 +13,9 @@ The `IDR` object contains configuration for the [Identity Resolver Service](/doc ## Definition -| Property | Required | Description | Type | -|----------|----------|-------------|------| -| dlrAPIUrl | Yes | URL for the Identity Resolver API | String | -| dlrAPIKey | No | API key for the Identity Resolver | String | \ No newline at end of file +| Property | Required | Description | Type | +| ---------------- | -------- | ----------------------------------- | ------ | +| dlrAPIUrl | Yes | URL for the Identity Resolver API | String | +| dlrAPIKey | No | API key for the Identity Resolver | String | +| namespace | Yes | Namespace for the Identity Resolver | String | +| linkRegisterPath | No | Path to register a link | String | diff --git a/documentation/docs/mock-apps/services/process-aggregation-event.md b/documentation/docs/mock-apps/services/process-aggregation-event.md index abe58673..ae30e370 100644 --- a/documentation/docs/mock-apps/services/process-aggregation-event.md +++ b/documentation/docs/mock-apps/services/process-aggregation-event.md @@ -64,7 +64,9 @@ P-->>C: Return VC and resolver URL }, "dlr": { "dlrAPIUrl": "https://dlr.example.com/api", - "dlrAPIKey": "dlr-api-key-12345" + "dlrAPIKey": "dlr-api-key-12345", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "identifierKeyPath": "/parentItem/epc" } diff --git a/documentation/docs/mock-apps/services/process-dpp.md b/documentation/docs/mock-apps/services/process-dpp.md index c6595c74..923e600e 100644 --- a/documentation/docs/mock-apps/services/process-dpp.md +++ b/documentation/docs/mock-apps/services/process-dpp.md @@ -75,7 +75,9 @@ P-->>C: Return VC and resolver URL }, "dlr": { "dlrAPIUrl": "https://dlr.example.com", - "dlrAPIKey": "5555555555555" + "dlrAPIKey": "5555555555555", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "storage": { "url": "https://storage.example.com/v1/documents", diff --git a/documentation/docs/mock-apps/services/process-transaction-event.md b/documentation/docs/mock-apps/services/process-transaction-event.md index 999a1453..ea62c38a 100644 --- a/documentation/docs/mock-apps/services/process-transaction-event.md +++ b/documentation/docs/mock-apps/services/process-transaction-event.md @@ -66,7 +66,9 @@ P-->>C: Return VC and resolver URL }, "dlr": { "dlrAPIUrl": "https://dlr.example.com/api", - "dlrAPIKey": "dlr-api-key-12345" + "dlrAPIKey": "dlr-api-key-12345", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "identifierKeyPath": "/transactionId", "localStorageParams": { diff --git a/documentation/docs/mock-apps/services/process-transformation-event.md b/documentation/docs/mock-apps/services/process-transformation-event.md index 5b366022..0ec91972 100644 --- a/documentation/docs/mock-apps/services/process-transformation-event.md +++ b/documentation/docs/mock-apps/services/process-transformation-event.md @@ -65,7 +65,9 @@ P-->>C: Return EPCIS VC }, "dlr": { "dlrAPIUrl": "https://dlr.example.com/api", - "dlrAPIKey": "dlr-api-key-12345" + "dlrAPIKey": "dlr-api-key-12345", + "namespace": "gs1", + "linkRegisterPath": "/api/resolver" }, "storage": { "url": "https://storage.example.com/upload", diff --git a/packages/components/src/components/BarcodeGenerator/BarcodeGenerator.tsx b/packages/components/src/components/BarcodeGenerator/BarcodeGenerator.tsx index 410c2843..813b6455 100644 --- a/packages/components/src/components/BarcodeGenerator/BarcodeGenerator.tsx +++ b/packages/components/src/components/BarcodeGenerator/BarcodeGenerator.tsx @@ -1,5 +1,5 @@ -import { allowedIndexKeys } from '@mock-app/services'; -import { Box, Container } from '@mui/material'; +import { allowedIndexKeys, extractFromElementString } from '@mock-app/services'; +import { Box } from '@mui/material'; import JSONPointer from 'jsonpointer'; import { useEffect, useState } from 'react'; import Barcode from 'react-barcode'; @@ -15,7 +15,7 @@ export const BarcodeGenerator = (props: IBarcodeProps) => { const pathIndex = props.dataPath.split('/').findIndex((key) => allowedIndexKeys.includes(key)); if (pathIndex === -1) { - setValues(JSONPointer.get(props.data, props.dataPath)); + setValues([constructBarcode(JSONPointer.get(props.data, props.dataPath))]); } else { const headPath = props.dataPath.split('/').slice(0, pathIndex).join('/'); const tailPath = props.dataPath @@ -24,10 +24,46 @@ export const BarcodeGenerator = (props: IBarcodeProps) => { .join('/'); const array = JSONPointer.get(props.data, headPath); const values = array.map((item: any) => JSONPointer.get(item, `/${tailPath}`)); - setValues(values); + const parsedValues = values.map((item: any) => { + return constructBarcode(item); + }); + + setValues(parsedValues); } } }, [props.data, props.dataPath]); + + const constructBarcode = (data: string) => { + const convertToGS1String = (obj: any) => { + if (typeof obj !== 'object' || obj === null) return ''; + + let result = ''; + + // Handle '01' (01) first if it exists + if ('01' in obj) { + let value = obj['01']; + if (!/^\d{12,14}|\d{8}$/.test(value)) throw new Error('Invalid GTIN: ' + value); + value = value.padStart(14, '0'); + result += `(01)${value}`; + } + + // Handle all other AIs + for (const [ai, value] of Object.entries(obj) as any) { + if (ai === '01') continue; // Skip '01' as it's already handled + + if (!/^\d{2,4}$/.test(ai)) throw new Error(`Invalid AI: ${ai}`); + + result += `(${ai})${value}`; + } + + return result; + }; + + const aiArray = extractFromElementString(data); + + return convertToGS1String(aiArray); + }; + return ( {values.map((item) => { diff --git a/packages/mock-app/src/pages/Scanning.tsx b/packages/mock-app/src/pages/Scanning.tsx index b4d5615b..2b70855c 100644 --- a/packages/mock-app/src/pages/Scanning.tsx +++ b/packages/mock-app/src/pages/Scanning.tsx @@ -22,7 +22,7 @@ const Scanning = () => { try { setIsLoading(true); - const dlrUrl = await identityProvider.getDlrUrl(scannedCode); + const dlrUrl = await identityProvider.getDlrUrl(scannedCode, appConfig.identifyProvider.namespace); if (!dlrUrl) { return toastMessage({ status: Status.error, message: 'There no DLR url' }); } @@ -96,7 +96,7 @@ const Scanning = () => { qrbox={{ width: 500, height: 300 }} disableFlip={false} useBarCodeDetectorIfSupported={true} - focusMode= 'continuous' + focusMode='continuous' qrCodeSuccessCallback={onScanResult} qrCodeErrorCallback={onScanError} /> diff --git a/packages/services/src/__tests__/gs1.test.ts b/packages/services/src/__tests__/gs1.test.ts index 118a2aea..32faebe2 100644 --- a/packages/services/src/__tests__/gs1.test.ts +++ b/packages/services/src/__tests__/gs1.test.ts @@ -9,8 +9,9 @@ jest.mock('../types/types', () => ({ describe('Gs1Provider', () => { const gtinAI = 'gtin'; - const mockCode = '0109359502000010'; + const mockCode = '(01)09359502000010'; const providerUrl = 'https://example.com'; + const mockNamespace = 'gs1'; let gs1Provider: GS1Provider; @@ -20,79 +21,81 @@ describe('Gs1Provider', () => { }); describe('getDlrUrl', () => { - it('should return null if code is not set', async () => { - const code = ''; - jest.spyOn(publicAPI, 'post').mockResolvedValueOnce([]); - // Act - const dlrUrl = await gs1Provider.getDlrUrl(code, providerUrl); - - // Assert - expect(dlrUrl).toBeNull(); + it('should throw error if code is not set', async () => { + await expect(gs1Provider.getDlrUrl('', providerUrl, mockNamespace)).rejects.toThrow( + 'Failed to run get DLR Url. GTIN not found in the GS1 payload', + ); }); it('should return null if no products are fetched', async () => { - jest.spyOn(publicAPI, 'post').mockResolvedValueOnce([]); + jest.spyOn(publicAPI, 'get').mockResolvedValueOnce([]); - const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl); + const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl, mockNamespace); expect(dlrUrl).toBeNull(); }); it('should return null if gs1ServiceHost is not found', async () => { - const mockProducts = [{ - linkset: { - [GS1ServiceEnum.serviceInfo]: [] + const mockProducts = [ + { + linkset: { + [GS1ServiceEnum.serviceInfo]: [], + }, }, - }]; - jest.spyOn(publicAPI, 'post').mockResolvedValueOnce(mockProducts); + ]; + jest.spyOn(publicAPI, 'get').mockResolvedValueOnce(mockProducts); // Call the getDlrUrl method - const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl); + const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl, mockNamespace); // Ensure that the returned DLR URL is null expect(dlrUrl).toBeNull(); }); it('should return null if fetch fails', async () => { - jest.spyOn(publicAPI, 'post').mockRejectedValueOnce(new Error('Failed to fetch')); + jest.spyOn(publicAPI, 'get').mockRejectedValueOnce(new Error('Failed to fetch')); - await expect(gs1Provider.getDlrUrl(mockCode, providerUrl)).rejects.toThrow('Failed to run get DLR Url. Failed to fetch'); + await expect(gs1Provider.getDlrUrl(mockCode, providerUrl, mockNamespace)).rejects.toThrow( + 'Failed to run get DLR Url. Failed to fetch', + ); }); it('should return DLR URL if gs1ServiceHost is found', async () => { // Set a code, mock the post method to return products with gs1ServiceHost, and specify the mock GS1 host const mockGs1Host = 'https://gs1servicehost.com'; - const mockProducts = [{ - [gtinAI]: mockCode, - linkset: { - [GS1ServiceEnum.serviceInfo]: [{ href: mockGs1Host }] - }, - }]; - jest.spyOn(publicAPI, 'post').mockResolvedValueOnce(mockProducts); + const mockProducts = { + linkset: [ + { + [`${providerUrl}/${GS1ServiceEnum.serviceInfo}`]: [{ href: mockGs1Host }], + }, + ], + }; + jest.spyOn(publicAPI, 'get').mockResolvedValueOnce(mockProducts); // Call the getDlrUrl method - const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl); + const dlrUrl = await gs1Provider.getDlrUrl(mockCode, providerUrl, mockNamespace); // Ensure that the returned DLR URL matches the expected format - expect(dlrUrl).toBe(`${mockGs1Host}/gtin/${mockCode.slice(2)}?linkType=all`); + expect(dlrUrl).toBe(`${mockGs1Host}/gtin/${mockCode.slice(4)}?linkType=all`); }); it('should return DLR URL if the element string is combined multi AIs', async () => { const lotAI = '10'; const lotValue = '3000189'; const mockGs1Host = 'https://gs1servicehost.com'; - const elementStrings = `${mockCode}${lotAI}${lotValue}`; - const mockProducts = [{ - [gtinAI]: elementStrings, - linkset: { - [GS1ServiceEnum.serviceInfo]: [{ href: mockGs1Host }] - }, - }]; - jest.spyOn(publicAPI, 'post').mockResolvedValueOnce(mockProducts); - - const dlrUrl = await gs1Provider.getDlrUrl(elementStrings, providerUrl); - - expect(dlrUrl).toBe(`${mockGs1Host}/gtin/${mockCode.slice(2)}/lot/${lotValue}?linkType=all`); + const elementStrings = `${mockCode}(${lotAI})${lotValue}`; + const mockProducts = { + linkset: [ + { + [`${providerUrl}/${GS1ServiceEnum.serviceInfo}`]: [{ href: mockGs1Host }], + }, + ], + }; + jest.spyOn(publicAPI, 'get').mockResolvedValueOnce(mockProducts); + + const dlrUrl = await gs1Provider.getDlrUrl(elementStrings, providerUrl, mockNamespace); + + expect(dlrUrl).toBe(`${mockGs1Host}/gtin/${mockCode.slice(4)}/lot/${lotValue}?linkType=all`); }); }); @@ -121,5 +124,4 @@ describe('Gs1Provider', () => { expect(extractedCode).toBe('12345678901234'); }); }); - }); diff --git a/packages/services/src/__tests__/helpers.test.ts b/packages/services/src/__tests__/helpers.test.ts index 08e7bdc6..06ad667a 100644 --- a/packages/services/src/__tests__/helpers.test.ts +++ b/packages/services/src/__tests__/helpers.test.ts @@ -5,6 +5,7 @@ import { incrementQuality, concatService, constructIdentifierString, + extractDomain, } from '../utils/helpers'; describe('helpers', () => { @@ -44,6 +45,21 @@ describe('helpers', () => { }); }); +describe('extractDomain', () => { + it('should return the domain of a url', () => { + const url = 'https://example.com/test'; + const result = extractDomain(url); + expect(result).toBe('https://example.com'); + }); + + it('should return an empty string if the url is invalid', () => { + const url = 'invalid'; + expect(() => { + extractDomain(url); + }).toThrow('Invalid URL'); + }); +}); + describe('concatService', () => { it('should concatenate the values of the arguments passed to it', () => { const data = { diff --git a/packages/services/src/__tests__/linkResolver.test.ts b/packages/services/src/__tests__/linkResolver.test.ts index 59c1f588..9f24325e 100644 --- a/packages/services/src/__tests__/linkResolver.test.ts +++ b/packages/services/src/__tests__/linkResolver.test.ts @@ -37,6 +37,7 @@ describe('create link resolve service', () => { linkType: LinkType.epcisLinkType, dlrAPIUrl: 'https://dlr.com', dlrAPIKey: 'dlr-key', + namespace: 'gtin', qualifierPath: '', }; @@ -49,16 +50,12 @@ describe('create link resolve service', () => { mockValue.verificationPage, mockValue.dlrAPIUrl, mockValue.dlrAPIKey, + mockValue.namespace, ); expect(resolverUrl).toEqual( - `${mockValue.dlrAPIUrl}/${mockValue.identificationKeyType}/${mockValue.identificationKey}?linkType=all`, + `${mockValue.dlrAPIUrl}/${mockValue.namespace}/${mockValue.identificationKeyType}/${mockValue.identificationKey}?linkType=all`, ); - expect(mockValue.identificationKeyType).toEqual(expectParamsCallAPI[0].identificationKeyType); - expect(mockValue.identificationKey).toEqual(expectParamsCallAPI[0].identificationKey); - expect(mockValue.itemDescription).toEqual(expectParamsCallAPI[0].itemDescription); - expect(mockValue.verificationPage).toEqual(expectParamsCallAPI[0].responses[0].targetUrl); - expect(mockValue.dlrAPIKey).toEqual(expectToken); }); it('should throw error when creating link resolver', async () => { @@ -75,6 +72,7 @@ describe('create link resolve service', () => { qualifierPath: '', dlrAPIUrl: 'https://dlr.com', dlrAPIKey: 'dlr-key', + namespace: 'gtin', }); } catch (error: any) { expect(error.message).toEqual(errorMessage); diff --git a/packages/services/src/epcisEvents/aggregationEvent.ts b/packages/services/src/epcisEvents/aggregationEvent.ts index 74b7722e..0df1c8db 100644 --- a/packages/services/src/epcisEvents/aggregationEvent.ts +++ b/packages/services/src/epcisEvents/aggregationEvent.ts @@ -60,6 +60,7 @@ export const processAggregationEvent: IService = async ( epcisAggregationEvent.dlrVerificationPage, dlr.dlrAPIUrl, dlr.dlrAPIKey, + dlr.namespace, qualifierPath, ); diff --git a/packages/services/src/epcisEvents/helpers.ts b/packages/services/src/epcisEvents/helpers.ts index 3f74e670..85f205e9 100644 --- a/packages/services/src/epcisEvents/helpers.ts +++ b/packages/services/src/epcisEvents/helpers.ts @@ -3,11 +3,16 @@ import { deleteValuesFromLocalStorage } from '../features/localStorage.service.j import { buildElementString, extractFromElementString, getLinkResolverIdentifier } from '../linkResolver.service.js'; import { ICurrentAndDependencies, allowedIndexKeys, randomIntegerString } from '../utils/helpers.js'; -export const generateLinkResolver = (dlrUrl: string, identificationKeyType: string, queryString: string) => { +export const generateLinkResolver = ( + dlrUrl: string, + namespace: string, + identificationKeyType: string, + queryString: string, +) => { const _generateLinkResolver = ({ currentData, dependenciesValues }: ICurrentAndDependencies) => { const { identifier, qualifierPath } = getLinkResolverIdentifier(dependenciesValues![0]); const path = qualifierPath.includes('?') ? `${qualifierPath}&${queryString}` : `${qualifierPath}?${queryString}`; - return `${dlrUrl}/${identificationKeyType}/${identifier}${path}`; + return `${dlrUrl}/${namespace}/${identificationKeyType}/${identifier}${path}`; }; return _generateLinkResolver; }; diff --git a/packages/services/src/epcisEvents/transactionEvent.ts b/packages/services/src/epcisEvents/transactionEvent.ts index 69c84b8b..1dd4246f 100644 --- a/packages/services/src/epcisEvents/transactionEvent.ts +++ b/packages/services/src/epcisEvents/transactionEvent.ts @@ -48,6 +48,7 @@ export const processTransactionEvent: IService = async ( epcisTransactionEvent.dlrVerificationPage, dlr.dlrAPIUrl, dlr.dlrAPIKey, + dlr.namespace, qualifierPath, LinkType.epcisLinkType, ); diff --git a/packages/services/src/epcisEvents/transformationEvent.ts b/packages/services/src/epcisEvents/transformationEvent.ts index 5c02858d..e24d4c99 100644 --- a/packages/services/src/epcisEvents/transformationEvent.ts +++ b/packages/services/src/epcisEvents/transformationEvent.ts @@ -83,6 +83,7 @@ export const processTransformationEvent: IService = async (data: any, context: I epcisTransformationEventContext.dlrVerificationPage, dlrContext.dlrAPIUrl, dlrContext.dlrAPIKey, + dlrContext.namespace, transformationEventQualifierPath, LinkType.epcisLinkType, ); @@ -105,6 +106,7 @@ export const processTransformationEvent: IService = async (data: any, context: I dppContext.dlrVerificationPage, dlrContext.dlrAPIUrl, dlrContext.dlrAPIKey, + dlrContext.namespace, qualifierPath, ); }), @@ -140,6 +142,7 @@ export const issueEpcisTransformationEvent = async ( handlers: { generateLinkResolver: generateLinkResolver( dlrContext.dlrAPIUrl, + dlrContext.namespace, IdentificationKeyType.gtin, `linkType=${LinkType.certificationLinkType}`, ), diff --git a/packages/services/src/epcisEvents/types.ts b/packages/services/src/epcisEvents/types.ts index b3cc46e8..19d8156d 100644 --- a/packages/services/src/epcisEvents/types.ts +++ b/packages/services/src/epcisEvents/types.ts @@ -32,6 +32,7 @@ export interface IDLRAI { export interface IConfigDLR { dlrAPIUrl: string; dlrAPIKey: string; + namespace: string; } export interface IStorageContext { diff --git a/packages/services/src/identityProviders/GS1Provider.ts b/packages/services/src/identityProviders/GS1Provider.ts index cff6cb38..3c35637d 100644 --- a/packages/services/src/identityProviders/GS1Provider.ts +++ b/packages/services/src/identityProviders/GS1Provider.ts @@ -1,11 +1,11 @@ import GS1DigitalLinkToolkit from 'GS1_DigitalLink_Resolver_CE/digitallink_toolkit_server/src/GS1DigitalLinkToolkit.js'; -import { IdentityProviderStrategy } from './IdentityProvider.js'; import { publicAPI } from '../utils/httpService.js'; +import { IdentityProviderStrategy } from './IdentityProvider.js'; export enum GS1ServiceEnum { - certificationInfo = 'https://gs1.org/voc/certificationInfo', - verificationService = 'https://gs1.org/voc/verificationService', - serviceInfo = 'https://gs1.org/voc/serviceInfo', + certificationInfo = 'voc/certificationInfo', + verificationService = 'voc/verificationService', + serviceInfo = 'voc/serviceInfo', } export class GS1Provider implements IdentityProviderStrategy { @@ -13,20 +13,45 @@ export class GS1Provider implements IdentityProviderStrategy { * Function to retrieve the DLR URL based on the GTIN code and identification provider URL. * @returns The DLR (Digital Link Resolver) URL corresponding to the provided GTIN code, or null if not found. */ - async getDlrUrl(code: string, providerUrl: string): Promise { + async getDlrUrl(code: string, providerUrl: string, namespace?: string): Promise { + const parseGS1Payload = (payload: any) => { + const aiRegex = /\((\d+)\)([^(]+)/g; + const parsed = Array.from(payload.matchAll(aiRegex), (match) => [(match as any)[1], (match as any)[2]]); + return parsed.flat().join('/'); + }; + try { - const fetchProductPayload = { keys: [code] }; - const products: any[] = await publicAPI.post(providerUrl, fetchProductPayload); - if (!products || !products.length) { + const fetchProductPayload = parseGS1Payload(code); + + const extractGTIN = (gs1String: string): string | null => { + const parts = gs1String.split('/'); + for (let i = 0; i < parts.length; i += 2) { + if (parts[i] === '01' && i + 1 < parts.length) { + return `01/${parts[i + 1]}`; + } + } + return null; + }; + + const gtin = extractGTIN(fetchProductPayload); + if (gtin === null) { + throw new Error('GTIN not found in the GS1 payload'); + } + + const { linkset }: any = await publicAPI.get( + namespace ? `${providerUrl}/${namespace}/${gtin}?linkType=all` : `${providerUrl}/${gtin}?linkType=all`, + ); + + if (!linkset || !linkset.length) { return null; } // Extract the GS1 service host from the fetched products data - const gs1ServiceHost: string = products[0]?.linkset?.[GS1ServiceEnum.serviceInfo]?.[0]?.href; + const gs1ServiceHost: string = linkset[0]?.[`${providerUrl}/${GS1ServiceEnum.serviceInfo}`]?.[0]?.href; if (!gs1ServiceHost) { return null; } - + const gs1DigitalLinkToolkit = new GS1DigitalLinkToolkit(); const gs1DigitalLink = gs1DigitalLinkToolkit.gs1ElementStringsToGS1DigitalLink(code, true, gs1ServiceHost); diff --git a/packages/services/src/identityProviders/IdentityProvider.ts b/packages/services/src/identityProviders/IdentityProvider.ts index 91088247..da6d91aa 100644 --- a/packages/services/src/identityProviders/IdentityProvider.ts +++ b/packages/services/src/identityProviders/IdentityProvider.ts @@ -1,5 +1,5 @@ export interface IdentityProviderStrategy { - getDlrUrl: (code: string, providerUrl: string) => Promise; + getDlrUrl: (code: string, providerUrl: string, namespace?: string) => Promise; getCode: (decodedText: string, formatName: string) => string; } @@ -12,8 +12,8 @@ export class IdentityProvider { this.identityProviderUrl = identityProviderUrl; } - getDlrUrl(code: string): Promise { - return this.identityProviderStrategy.getDlrUrl(code, this.identityProviderUrl); + getDlrUrl(code: string, namespace?: string): Promise { + return this.identityProviderStrategy.getDlrUrl(code, this.identityProviderUrl, namespace); } getCode(decodedText: string, formatName: string): string { diff --git a/packages/services/src/linkResolver.service.ts b/packages/services/src/linkResolver.service.ts index b0d5fa89..3c6300c7 100644 --- a/packages/services/src/linkResolver.service.ts +++ b/packages/services/src/linkResolver.service.ts @@ -3,6 +3,7 @@ import { IDLRAI } from './epcisEvents/types.js'; import { GS1ServiceEnum } from './identityProviders/GS1Provider.js'; import { MimeTypeEnum } from './types/types.js'; import { privateAPI } from './utils/httpService.js'; +import { extractDomain } from './utils/helpers.js'; /** * Generates a link resolver URL based on the provided linkResolver and linkResponse objects. * @@ -34,9 +35,9 @@ import { privateAPI } from './utils/httpService.js'; */ export enum LinkType { - verificationLinkType = 'gs1:verificationService', - certificationLinkType = 'gs1:certificationInfo', - epcisLinkType = 'gs1:epcis', + verificationLinkType = 'verificationService', + certificationLinkType = 'certificationInfo', + epcisLinkType = 'epcis', } export enum MimeType { @@ -74,18 +75,22 @@ export interface ICreateLinkResolver { qualifierPath: string; dlrAPIUrl: string; dlrAPIKey: string; + namespace: string; + linkRegisterPath?: string; responseLinkType?: string; queryString?: string | null; } -export interface GS1LinkResolver extends ILinkResolver { +export interface LinkResolver extends Omit { + namespace: string; qualifierPath: string; active: boolean; - responses: GS1LinkResponse[]; + responses: LinkResponse[]; } -export interface GS1LinkResponse extends ILinkResponse { +export interface LinkResponse extends ILinkResponse { + title: string; ianaLanguage: string; context: string; active: boolean; @@ -96,17 +101,20 @@ export interface GS1LinkResponse extends ILinkResponse { } export const createLinkResolver = async (arg: ICreateLinkResolver): Promise => { - const { dlrAPIUrl, linkResolver, linkResponses, qualifierPath, responseLinkType = 'all' } = arg; - let registerQualifierPath = qualifierPath; - if (arg.queryString) { - registerQualifierPath = qualifierPath.includes('?') - ? `${qualifierPath}&${arg.queryString}` - : `${qualifierPath}?${arg.queryString}`; - } - const params: GS1LinkResolver[] = [constructLinkResolver(linkResolver, linkResponses, registerQualifierPath)]; + const { + dlrAPIUrl, + namespace, + linkRegisterPath = '/api/resolver', + linkResolver, + linkResponses, + qualifierPath, + responseLinkType = 'all', + } = arg; + + const params: LinkResolver = constructLinkResolver(namespace, linkResolver, linkResponses, qualifierPath); try { privateAPI.setBearerTokenAuthorizationHeaders(arg.dlrAPIKey || ''); - await privateAPI.post(`${dlrAPIUrl}/resolver`, params); + await privateAPI.post(`${dlrAPIUrl}${linkRegisterPath}`, params); const path = responseLinkType === 'all' @@ -114,28 +122,30 @@ export const createLinkResolver = async (arg: ICreateLinkResolver): Promise { - const gs1LinkResolver: GS1LinkResolver = { + const constructedLinkResolver: LinkResolver = { + namespace: namespace, identificationKeyType: linkResolver.identificationKeyType, identificationKey: linkResolver.identificationKey, itemDescription: linkResolver.itemDescription, - qualifierPath, + qualifierPath: qualifierPath ? qualifierPath : '/', active: true, responses: [], }; linkResponses.forEach((linkResponse: ILinkResponse) => { - const gs1LinkResponseForUS: GS1LinkResponse = { + const LinkResponseForUS: LinkResponse = { ianaLanguage: 'en', context: 'us', defaultLinkType: false, @@ -144,10 +154,11 @@ export const constructLinkResolver = ( defaultMimeType: false, fwqs: false, active: true, + title: linkResponse.linkTitle, ...linkResponse, }; - const gs1LinkResponseForAU: GS1LinkResponse = { + const LinkResponseForAU: LinkResponse = { ianaLanguage: 'en', context: 'au', defaultLinkType: false, @@ -156,12 +167,13 @@ export const constructLinkResolver = ( defaultMimeType: false, fwqs: false, active: true, + title: linkResponse.linkTitle, ...linkResponse, }; - gs1LinkResolver.responses.push(gs1LinkResponseForUS, gs1LinkResponseForAU); + constructedLinkResolver.responses.push(LinkResponseForUS, LinkResponseForAU); }); - return gs1LinkResolver; + return constructedLinkResolver; }; export const registerLinkResolver = async ( @@ -173,6 +185,7 @@ export const registerLinkResolver = async ( verificationPage: string, dlrAPIUrl: string, dlrAPIKey: string, + namespace: string, qualifierPath?: string, responseLinkType?: string, ) => { @@ -186,19 +199,19 @@ export const registerLinkResolver = async ( const verificationPassportPage = `${verificationPage}/?${queryString}`; const linkResponses: ILinkResponse[] = [ { - linkType: LinkType.verificationLinkType, + linkType: `${namespace}:${LinkType.verificationLinkType}`, linkTitle: 'VCKit verify service', targetUrl: verificationPage, mimeType: MimeType.textPlain, }, { - linkType: linkType, + linkType: `${namespace}:${linkType}`, linkTitle: linkTitle, targetUrl: url, mimeType: MimeType.applicationJson, }, { - linkType: linkType, + linkType: `${namespace}:${linkType}`, linkTitle: linkTitle, targetUrl: verificationPassportPage, mimeType: MimeType.textHtml, @@ -210,6 +223,7 @@ export const registerLinkResolver = async ( return await createLinkResolver({ dlrAPIUrl, + namespace, linkResolver, linkResponses, queryString, @@ -224,6 +238,8 @@ export const registerLinkResolver = async ( * @returns The DLR passport data if found, otherwise returns null. */ export const getDlrPassport = async (dlrUrl: string): Promise => { + const rootDlrDomain = extractDomain(dlrUrl); + // Fetch DLR data from the provided DLR URL const dlrData = await privateAPI.get(dlrUrl); if (!dlrData) { @@ -232,14 +248,14 @@ export const getDlrPassport = async (dlrUrl: string): Promise => { // Find certificate passports in the DLR data const certificatePassports = dlrData?.linkset?.find( - (linkSetItem: any) => linkSetItem[GS1ServiceEnum.certificationInfo], + (linkSetItem: any) => linkSetItem[`${rootDlrDomain}/${GS1ServiceEnum.certificationInfo}`], ); if (!certificatePassports) { return null; } // Extract passport infos from certificate passports - const dlrPassports = certificatePassports[GS1ServiceEnum.certificationInfo]; + const dlrPassports = certificatePassports[`${rootDlrDomain}/${GS1ServiceEnum.certificationInfo}`]; if (!dlrPassports) { return null; } diff --git a/packages/services/src/processDPP.service.ts b/packages/services/src/processDPP.service.ts index 117befc3..dad3ad59 100644 --- a/packages/services/src/processDPP.service.ts +++ b/packages/services/src/processDPP.service.ts @@ -52,6 +52,7 @@ export const processDPP: IService = async (data: any, context: IContext): Promis dppContext.dlrVerificationPage, linkResolverContext.dlrAPIUrl, linkResolverContext.dlrAPIKey, + linkResolverContext.namespace, qualifierPath, LinkType.certificationLinkType, ); diff --git a/packages/services/src/utils/helpers.ts b/packages/services/src/utils/helpers.ts index b7bef623..9da3f849 100644 --- a/packages/services/src/utils/helpers.ts +++ b/packages/services/src/utils/helpers.ts @@ -301,6 +301,11 @@ export const constructObject = ( return data; }; +export const extractDomain = (url: string): string => { + const parsedUrl = new URL(url); + return `${parsedUrl.protocol}//${parsedUrl.host}`; +}; + export const constructIdentifierString = ( data: any, identifierKeyPath: string | { function: string; args: any },