diff --git a/dpp-tutorial/README.md b/dpp-tutorial/README.md new file mode 100644 index 000000000..de940c22e --- /dev/null +++ b/dpp-tutorial/README.md @@ -0,0 +1,187 @@ + + +
  

Tractus-X​ Digital Product Passport​ Workstream​

Second Tractus-X Community Days - 16, 17 May 2024 - Stuttgart

+ + +## Description + +The digital product passport application provides a consumer user interface to request a battery passport from a battery manufacturer using the standardized components and technologies in a Catena-X network. The passport will be displayed in a human-readable from any browser. The data exchange standards given by Catena-X are used to provide the battery passport to different personas (roles) in the network. + +In particular, the appliction is used to access the battery passport data provided by battery manufacturer. By scanning QR-code or knowing the manufacturer and battery-ID, a user can request the passport through **Eclipse Dataspace Connectors (EDCs)** over the Catena-X network. The passport provider will provide data attributes that is only visible to a permitted signed-in user. + +## Problem Statement + +Company-X has manufactured cars for the market in Germany. The cars were built using components from different companies. A surprise inspection is scheduled by a governmental environment auditor in 5 months. This generates a problem for Company-X, because all the data from the parts is not available. Company-X sends an email to their supplier companies, however their send incomplete data in different formats and structures, which confuses Company-X engineers when calculating the carbon footprint and makes the compliance to the regulations really complicated. It is hard to keep track from the latest regulations and convince supplier companies to give all their data without loosing control over it. So, the engineers decide to use Catena-X for the data exchange. Per email Company-X request its suppliers to provide the data while still maintaining data sovereignty, simply by following the Catena-X standards for the Digital Product Passport which comply with the regulations of the inspection. ​ + +You are one of the suppliers from Company-X. To maintain your client, you are required to create a Digital Product Pass for your Part, so that Company-X can obtain the total PCF value from its car. Creating a Car Digital Product Pass and fulfilling the sustainability regulations imposed in the inspection. + +## Pre-Requisites + + * Kubernetes 1.19+ + * Helm 3.2.0+ + * PV provisioner support in the underlying infrastructure + * MXD Components: + 2 EDCs (Provider + Consumer) + 1 Keycloak + 1 Vault + * BPN Discovery Service + * EDC Discovery Service + * Discovery Service + * Printer (for printing QR codes) + * Mobile Phone with Browser (for scanning QR codes) + + +## Preparation + +Split into groups of five individuals, ensuring each group receives a sheet of paper containing a distinct Part from the [test-data](./resources/test-data/carParts.json). + +Group name is defined like this: + +``` + dpp--partName +``` + +> [!NOTE] +> Session number will be provided by the coaches! There are three sessions, values from [1-3]. + +## Phase 1: Deployment + +> [!NOTE] +> The deployment of the [Digital Product Passport application](./deployment.md) is not within the scope of the Workshop, as it has already been deployed for you. + +## Phase 2: Data Provision + +In this Phase, you as a provider will create a Digital Product Passport of a spectific Part of the Arena-X Car. For this phase, you can use your own computer through Visual Studio Code / Notepad ++ or a given Virtual Machine. + +##### Duration: 45 mins + +#### Step 1 - Create a Digital Product Passport (DPP) + +In this step, you'll create the Digital Product Passport (DPP) by utilizing data from the Product Carbon Footprint and specifications of a specific car part from the Arena. + + * Follow the tutorial on [How to create Aspect Model](./aspect-model.md) + +#### Step 2 - Create a Digital Twin integrating the generated DPP as a submodel + +In this step, you will create a Digital Twin of your provided Car part. + + * Follow the tutorial on [How to create a Digital Twin](./digital-twin-provision) + +#### Step 3 - Upload the Digital Twin in the Digital Twin Registry + +Provide the Digital Twin and its relations in the Digital Twin Registry. + +* UUID +* Part Instance ID + * Manufacturer Part ID + * Submodel Reference + +#### Step 4 - Generate the QR Code + + * Follow the tutorial on [How to generate a QR code](./qr-code.md) + +#### Step 5 - Print the QR-Code + +Print the QR Code from the nearby printer and paste it in the specific Part in the Arena -X. Ensure that the QR code is securely attached and easily scannable. Test the scanning functionality to verify that the encoded information can be retrieved accurately. + +Great! The data provisioning process has been successfully set up. It is now ready for data exchange within the dataspace. This means that all necessary configurations and integrations have been completed, ensuring efficient data sharing. + +## Phase 3: Data Consumption + +In this phase, you as a consumer, will access the Digital Product Pass (DPP) consumer application and retrieve data from the network by either scanning a QR code or entering an ID. + +##### Duration: 45 mins + +#### Step 1 - Consumption - Access DPP Application + + * Follow the tutorial on [DPP Data Consumption](./data-consumption.md) + + * You can access the application by using URL and the credentials. + + * Scan the available QR Codes on the Car parts or provide the ID. + + * Upon scanning, you will obtain the passport of the part. + + * Access the UI of the passport to view its details. + + * Look for the Product Carbon Footprint (PCF) information for each of the specific car part + + * Calculate and add up the PCF values of all individual parts to obtain the aggregate Carbon Footprint value for the entire car. + +#### Step 2 - Creating the Final Digital Product Passport (DPP) for the Whole Car + + * Scan the available QR codes from various parts of the car and record the Product Carbon Footprint (PCF) value of each specific part. + +* #### Compile the following information to create the DPP: + + * Name: Provide a name for the car model. + * Description: Include a brief description of the car, its features, and specifications. + * ID: Assign a unique identifier for the car. + * Aggregate Value: Calculate and add up the PCF values of all individual parts to obtain the aggregate carbon footprint value for the entire car. + +For creating the Car passport use [this template](./resources/digital-twins/car-dt-template.json) + +1º - Generate a new UUID4 in this [uuid generator page](https://www.uuidgenerator.net/version4) and copy it to the "id" and "global asset id" part. + +2º - Paste it on "globalAssetId" with this format `urn:uuid:` + +3º - As "id" add with this schema: `urn:uuid:` + +4º - Create Part Instance Id of your choice and add to `specificAssetIds["name=partInstanceId"].value + +>[!IMPORTANT] +> Remember the part instance id for proving the QR code + +5º -> For `manufacturerPartId` use MPI0012 + +6º -> Add the submodel as specified in the [digital-twin-provision](. digital-twin-provision) guide to the twin. + +7º -> Upload your payload to the data service as specified in the [digital-twin-provision](. digital-twin-provision) guide. + +8º -> Generate a QR code as specified in the [qr code guide](./qr-code.md) + +9º -> Scan it and access it with the app. + +10º -> Add your QR code to the board! + +## Links of interest + +| How to Guides | Link | +| -------- | ----- | +| How to deploy DPP Application | [deployment.md](./deployment.md) | +| How to create Aspect Model | [aspect-model.md](./aspect-model.md) | +| How to create a Digital Twin | [digital-twin-provision](. digital-twin-provision) | +| How to generate a QR code | [qr-code.md](./qr-code.md) | +| DPP Data Consumption | [data-consumption.md](./data-consumption.md) | + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass diff --git a/dpp-tutorial/aspect-model.md b/dpp-tutorial/aspect-model.md new file mode 100644 index 000000000..2f8520641 --- /dev/null +++ b/dpp-tutorial/aspect-model.md @@ -0,0 +1,137 @@ + + +# DPP Instance Aspect Model Creation Guide + +This guide provides a simple explanation on how to create a digital product pass serialized aspect model payload. + +## Prerequisites + +You must fullfill the following pre-requisites: + +- A Catena-X Standarized Aspect Model (in this case we use the [Digital Product Pass v2.0.0 Model](https://github.com/eclipse-tractusx/sldt-semantic-models/tree/main/io.catenax.generic.digital_product_passport/2.0.0)) +- JSON Editor like [VS Code](https://code.visualstudio.com/) or [Notepad++](https://notepad-plus-plus.org/downloads/) +- Car Parts JSON Test Data [found here](./resources/test-data/carParts.json) + +>[!WARNING] +> +> The model v2.0.0 of the Digital Product Pass is **DEPRECATED** and its used here only as demo purposes, please check the latests models in: [Digital Product Pass Models](https://github.com/eclipse-tractusx/sldt-semantic-modelstree/main/io.catenax.generic.digital_product_passport) + + +## Aspect Model Creation + +Follow this steps to create a new Digital Product Passport serialized model: + +### 1º - Paste the example payload in your VS Code/Notepad++ application + +Paste this [Digital Product Passport v2.0.0 Payload](./resources/payloads/example.json) in the VS Code/Notepad++: + +![DPP Example](./resources/screenshots/dpp-example.png) + + +### 2º - Find your assigned part in the test data file + +Test JSON file can be found [here](./resources/test-data/carParts.json) or in the paper at the worksession. + +To find your part: + +1 - Search by uuid with CTRL + F: + +![search id](./resources/screenshots/idsearch.png) + +You will get your information in a paper: + +Example: + +```json +{ + "f10c0181-ce80-4139-81f0-a59226c88bfe": { + "Name":"TRUNK LID HINGE (LEFT)", + "PCF (Product Carbon Footprint)": "189 kgCO2e", + "Height": "24 cm", + "Width": "2 cm", + "Length": "38 cm", + "Weight": "1.4 kg", + "id": "f10c0181-ce80-4139-81f0-a59226c88bfe", + "Part Instance ID": "DLH-5159", + "Manufacturing Date": "01.12.2023", + "Placed on Market Date": "15.01.2024", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } +} + +``` + +> [!TIP] +> Copy and paste the data for creating your digital product pass faster! + + +### 3º - Substitute data in the template + +For example for adding the PCF value follow the following path: + +```text +sustainability.PEF.carbon.value +``` + +Example: + +![PCF](./resources/screenshots/pcf-update.png) + +#### Where to substitute the data? + +Follow this paths to find where the information is located. + +| Property | Path | +| -------- | ----- | +| Name | typology.shortName | +| Complete Name | typology.longName | +| Class/Type of Part | typology.class.definition | +| PCF | sustainability.PEF.carbon.value | +|Height| characteristics.physicalDimension.height.value | +|Width| characteristics.physicalDimension.width.value| +|Length| characteristics.physicalDimension.length.value| +|Weight| characteristics.physicalDimension.grossWeight.value| +|Part Instance Id | identification.localIdentifier.key | +|Manufacturing Date |operation.manufacturer.manufacturingDate | +|List of Materials | sustainability.material.left.name.name (Add In Array)| +|Hazard Materials | critical.left (add elements to list) | +| Guarantee | lifespan (Add value and unit for garantee) | + +Congratulations! You have successfully created your own digital product pass! + +> [!TIP] +> You can add more relavant data and personalized information at the digital product pass, follow the template and modify the data as you wish! + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass \ No newline at end of file diff --git a/dpp-tutorial/data-consumption.md b/dpp-tutorial/data-consumption.md new file mode 100644 index 000000000..2faae053a --- /dev/null +++ b/dpp-tutorial/data-consumption.md @@ -0,0 +1,176 @@ + + + +# DPP Consumption Guide + +This guide provides a simple way of accessing the digital product pass consumer application and retrieving data from the network scanning a QR code or introducing an ID. + + DATA CONSUMER DPP APP ___________________ + | ___________________ __________________ | | | + | | | | | | --> | | + | | DPP Frontend | <---> | DPP Backend | | | DATA PROVIDER | + | |___________________| |__________________| | <-- | | + | | |___________________| + +## Prerequisites + +You must have the following tools installed and configured: + +- DPP Application with Backend and Frontend components deployed. +- Login credentials to the DPP Frontend component +- Web Browser +- Catena-X Central Service Running (Federated IAM, Discovery Finder, BPN Discovery and EDC Discovery) + +## Login in the Frontend Application + +Introduce the DPP Application host url in the browser: + +```bash + +https:// + +``` + +You will be redirected to: + +```bash + +https:///passport + +``` + +And a login page from Catena-X will pop up. To perform the login follow this steps: + +### 1º Introduce Company Name + +``` +CX-Operator +``` + +![company selection](./resources/screenshots/company-selection.png) + +### 2º Introduce Test Credentials + +``` +Username: +cx-operator@tx.test +``` + +``` +Pass: +tractusx-umbr3lla! +``` + +![test login](./resources/screenshots/test-login.png) + +### 3º A Search by ID + +Change the `` and `` to the actual values in the part specification. + +``` +CX:: +``` + +![Introduce Id](./resources/screenshots/id-search.png) + +And click in "SEARCH" to start the search process! + +### 3º B Scan an existing QR Code + +For scanning the QR code just click in the button with the camera icon: + +![QR code button](./resources/screenshots/qrcode-button.png) + +Give permissions to the camera, and position the window over the QR code frame. + +![QR code scanning](./resources/screenshots/qrcode-scanning.png) + +### 5º Wait a few seconds for the policy selection pop-up to appear + +When the digital twin registries are being searched in the complete network, the digital product pass will call the following service to find where the digital twin registy with the digital twin data is located: + +![Loading Setup](./resources/screenshots/loading.png) + +This steps are done: + +- 1º [CX-0053](https://catena-x.net/fileadmin/user_upload/Standard-Bibliothek/Update_Maerz_2024/CX-0053-BPNDiscoveryServiceAPIs-v1.1.0.pdf) Discovery Finder API : [eclipse-tractusx/sldt-discovery-finder](https://github.com/eclipse-tractusx/sldt-discovery-finder) + +- 2º [CX-0053](https://catena-x.net/fileadmin/user_upload/Standard-Bibliothek/Update_Maerz_2024/CX-0053-BPNDiscoveryServiceAPIs-v1.1.0.pdf) BPN Discovery API : [eclipse-tractusx/sldt-bpn-discovery](https://github.com/eclipse-tractusx/sldt-bpn-discovery) + +- 3º [CX-0001](https://catena-x.net/fileadmin/user_upload/Standard-Bibliothek/Update_September23/CX-0001-EDCDiscoveryAPI_v1.0.2.pdf) EDC Discovery API : [eclipse-tractusx/portal-backend](https://github.com/eclipse-tractusx/portal-backend) + +- 4º -> Search for digital twin in the registries found + +- 5º -> Retrieve digital twin and find submodel for the digital product pass. + +- 6º -> Query with the EDC Consumer the Catalog from the EDC Provider looking for the asset + - (This information is found in the Digital Twin) + +Once the asset policy is found you will get a pop-up similar to this one: + +![Popup policy selection](./resources/screenshots/policy-selectionpopup.png) + +### 6º Agree on the policies + +Click on agree to accept the policy you have selected: + +![Agree Button](./resources/screenshots/agreebutton.png) + +> [!IMPORTANT] +> The new Digital Product Pass version (v3.0.0) that will be released in R24.05 allows you to configure the policies in the Backend application. +> There is a [policy configuration guide](https://github.com/eclipse-tractusx/digital-product-pass/blob/main/docs/data-sovereignty/PolicyConfigGuide.md) that can help you understanding this better! + +### 7º Wait until contract negotiation is done + +In some seconds it should start updating with the latest status of your application. + +![Loading almoust completed](./resources/screenshots/loading-notcompletedyet.png) + +### 8º Visualize the passport!!! + +![Visualization](./resources/screenshots/visualization.png) + +#### Look for the PCF Information + +![PCF Information](./resources/screenshots/pcf-info.png) + +#### Check characteristics and many more! + +![characteristics](./resources/screenshots/characteristics.png) + +Congratulations! Now you are able to access the information regarding digital product passports and many more! + +> [!TIP] +> Other models like the Battery Passport and the Transmission Passport are also available to be visualized in the app. You can follow the [CX-0096 Digital Product Pass Triangle Standard](https://catena-x.net/fileadmin/user_upload/Standard-Bibliothek/Update_Maerz_2024/CX-0096-TriangleForDigitalProductPass-v1.1.0.pdf) to configure the other models in the digital twin. For providing data read the [Data Provision Guide](data-provision.md) + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass \ No newline at end of file diff --git a/dpp-tutorial/deployment.md b/dpp-tutorial/deployment.md new file mode 100644 index 000000000..6cc5c7e53 --- /dev/null +++ b/dpp-tutorial/deployment.md @@ -0,0 +1,294 @@ + + +# DPP Application Installation + +This guide provides the information needed to setup the Digital product Passport (DPP) application as a data consumer. It describes how to run a local setup to leverage the DPP frontend and backend components using a container platform. + + ________________________Kubernetes Cluster________________________ + | | + | _______________________Namespace________________________ | + | | ___________________ __________________ | | + | | | | | | | | + | | | DPP Frontend | <---> | DPP Backend | | | + | | |___________________| |__________________| | | + | |________________________________________________________| | + | | + |__________________________________________________________________| + + + + +## Prerequisites + +You must have the following tools installed and configured: + +- A container platform preferrably [Docker](https://docs.docker.com/engine/install/) +- A local Kubernetes cluster. It could be a [Minikube](https://minikube.sigs.k8s.io/docs/start/) or other cluster runtimes such as [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/). In this tutorial we would use a single node minikube cluster. +- A [Helm](https://helm.sh/) package manager for Kubernetes cluster to run kubernetes resources. +- MXD Setup + +## Clone a Git repository + +Use the following command in your terminal to clone the digital product pass git repository + +```bash +git clone https://github.com/eclipse-tractusx/digital-product-pass.git +``` + +> [!Note] +> If you already cloned this repository, you can ignore this step + + + +## Setup a cluster + +This step is optional for those who already have a running cluster. + + +```bash +# start minikube cluster +minikube start -p $USER + +# enable minikube ingress addon +minikube addons enable ingress -p $USER + +# create your namespace +kubectl create namespace $USER +``` + +> [!TIP] +> $USER is a current user account from Operating System +> The current usr can be checked using command: `echo $USER` or `whoami` + + +## Check cluster availability + + +```bash +# check is cluster is accessible using the forrowing command +kubectl config current-context + +# output - you must see your minikube as current context +# minikube + +# check your namespace is accessible +kubectl get pods + +# output +# No resources found in $USER namespace +``` + +> [!CAUTION] +> Each user must follow the guide inside its user namespace + + + + +## Configure the helm values + +Go to the [values.yaml](../../charts/digital-product-pass/values.yaml) file + +### Backend Configuration +The backend has the following settings to be configured: + +* Add the *HOSTNAME* to the **backend** settings +```yaml +backend: + hostname: "" +``` + +* Add the *HOSTNAME* to the **ingress** settings + +```yaml +ingress: + hosts: + - host: "" + tls: + - secretName: tls-secret + hosts: + - "" +``` + +* Add the *X_API_KEY*, *PARTICIPANT_ID* and *EDC_HOSTNAME* to the **edc** settings + +```yaml +edc: + xApiKey: "" + participantId: "" + hostname: "" +``` + +* Add the *HOSTNAME* and set *enabled* flag to *TRUE* to the **irs** +```yaml +irs: + enabled: true + hostname: "" +``` + +* Add the *ENCRYPTION_KEY* to the **process** +```yaml +process: + encryptionKey:"" +``` + +* Add the *DISCOVERY_FINDER_HOST* to the **discovery** settings +```yaml +discovery: + hostname: "" +``` + +### Frontend Configuration +The backend has the following settings to be configured: + +* Add the *HOSTNAME* to the **ingress** settings +```yaml +ingress: + hosts: + - host: "" + tls: + - secretName: tls-secret + hosts: + - "" +``` + +* Add the *HOSTNAME* to the **backend** +```yaml +backend: + hostname: "" +``` + +* Add the *PORTAL_HOSTNAME* to the **portal** settings +```yaml +portal: + hostname: "" +``` + +* Add the following values to the **oauth** configuration: +*HOSTNAME*, *CLIENT_ID*,*CLIENT_SECRET*, *REALM*, *APP_ID*, *BPN* and *API_KEY* +```yaml +oauth: + hostname: "" + techUser: + clientId: "" + clientSecret: "" + realm: "" + appId: "" + bpnCheck: + enabled: true + bpn: "" + roleCheck: + enabled: false + apiKey: + header: "X-Api-Key" + secret: "" +``` + +## Deploy the Application + +Use the following command to install the application as configured helm deployment: + +```bash +# install helm charts -DPP +helm install digital-product-pass ./charts/digital-product-pass -f ./charts/digital-product-pass/values.yaml --namespace $USER + +# you would see the similar output once the application is deployed +NAME: digital-product-pass +LAST DEPLOYED: THU May 9 16:24:00 2024 +NAMESPACE: dpp01 +STATUS: deployed +REVISION: 1 + +# wait until all the pods are ready +kubectl wait --namespace $USER \ + --for=condition=ready pod all \ + --timeout=90s +``` + +> **NOTE**: This command will deploy the complete application. However, it would take some minutes until all the pods are up and in running state. You can check the pod state repeatedly by the following command. + + +## Expose the application +```bash +# enable port forwarding to expose the frontend as a service to outside world +kubectl port-forward service/dpp-frontend --namespace $USER :8080 --address 0.0.0.0 + +# enable port forwarding to expose the backend application as a service to outside world +kubectl port-forward service/dpp-frontend --namespace $USER :8888 --address 0.0.0.0 + +# access the application through your browser and your mobile device +http://: +``` + + +## Undeploy the Application + +```bash +# in case of any issue, redeploy the application +# uninstall the existing helm chart +helm uninstall digital-product-pass --namespace $USER + +# output of the above command +release "digital-product-pass" uninstalled +``` + +Install the helm charts again + +```bash +# install helm charts - DPP +helm install digital-product-pass ./charts/digital-product-pass -f ./charts/digital-product-pass/values.yaml --namespace $USER +``` + +If everything works fine, then you have reached at the end of deployment guide. + +Congratulations, you have successfully setup the data consumer Digital Product Passport application. It is now available and ready to exchange data in the dataspace. + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass \ No newline at end of file diff --git a/dpp-tutorial/digital-twin-provision.md b/dpp-tutorial/digital-twin-provision.md new file mode 100644 index 000000000..05e173668 --- /dev/null +++ b/dpp-tutorial/digital-twin-provision.md @@ -0,0 +1,153 @@ + + +# Data Provision + ________EDC-Connector________ ________Registry________ ________Data Service________ + | | | | | | + | Controlplane <-> Dataplane | <---> | AAS DTR | <---> | A plain JSON Server | + |_____________________________| |________________________| |____________________________| + + +This guide provides the information needed to setup digital twin provisioning services as a data provider. Additionally, it enables you to create and register aspect models into the data service. + + +## Prerequisites + +You must have the following components up and running: + +- A Data Service (DS) to store passport payloads in a plain JSON format +- Digital Twin Registry (DTR) to store Digital Twins as Asset Administration Shells (AAS) +- A preconfigured EDC Conenctor (Data provider) +- Familiarity with the JSON structure +- Accessibility of components over the network + + +## Clone a Git repository + +Use the following command in your terminal to clone the digital product pass git repository + +```bash +git clone https://github.com/eclipse-tractusx/digital-product-pass.git +``` + +> [!Note] +> If you already cloned this repository, you can ignore this step + + +## Prepare Aspect Model + +In order to prepare aspect models, please follow the [aspect model guide](./aspect-model.md) + +## Add Aspect Model to the Submodel Server + +The data generated in previous step can be stored into the submode data service. + +The can be generated from here: https://www.uuidgenerator.net/ + +```bash +Example: uuid:urn:6fb9a71b-aee6-4063-a82e-957022aeaa7a +``` + +> [!IMPORTANT] +> Please substitute the <UUID> with the one generated above. + + +Open a new terminal and run the following command to add your data into the data service: +> POST /data/uuid:urn:<UUID> + +```bash +curl --location '/data/uuid:urn:' \ +--header 'Content-Type: application/json' \ +--data "@.json" +``` + +Verify your data is registerd in the service + +> GET /data/uuid:urn:<UUID> +```bash +curl --location '/data/uuid:urn:' \ +--header 'Content-Type: application/json' \ +``` + +## Create Digital Twin + +After preparing and registering aspect models, create a digital twin of a part assigned. +Create a new json and use the template in [resources/digital-twins/example-dt.json](./resources/digital-twins/example-dt.json) + +Replace the following placeholders: + +```bash + -> the value of part instance written on datasheet + -> the part number is written on the datasheet from a part + -> the UUID written on datasheet + -> the name is the part assigned +``` + +## Add Digital Twin into Digital Twin Registry (DTR) + +After creation of the digital twin in previous step, add the twin into Digital Twin Registry (DTR). + +> POST /shell-descriptors/ + +```bash +curl --location --request POST '/semantics/registry/api/v3.0/shell-descriptors/api/v3.0/shell-descriptors' \ +--header 'Content-Type: application/json' \ +--data '@resources/.json' +``` + +> [!Note] +> Every physical part of vehicle is represented by a Digital Twin object. A car is manufactured with a plenty of digital twins. + +The digital twin registered can be checked/verified from the following command: + +> [!Important] +> The should be encoded into base64. Use the following url for conversion: https://www.base64encode.org/ + +```bash +Example: +Digital Twin Id: urn:uuid:3f89d0d4-e11c-f83b-16fd-733c63d4e121 +Base64 Encoded: dXJuOnV1aWQ6M2Y4OWQwZDQtZTExYy1mODNiLTE2ZmQtNzMzYzYzZDRlMTIx +``` + +> GET /shell-descriptors/ + +```bash +curl --location --request GET '/semantics/registry/api/v3.0/shell-descriptors/' \ +--header 'Content-Type: application/json' +``` + +If everything works fine, then you have reached at the end of data provisioning guide. + +Congratulations, you have successfully setup the data provider. It is now available and ready to exchange data in the dataspace. + + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass diff --git a/dpp-tutorial/qr-code.md b/dpp-tutorial/qr-code.md new file mode 100644 index 000000000..22b0ca415 --- /dev/null +++ b/dpp-tutorial/qr-code.md @@ -0,0 +1,79 @@ + + +# How to generate and print a QR code + +This guide will provide you with the information you need to generate a QR code for each car part, as well as how to print the generated QR code in order to be able to attach it to the desired car part. + + +## Prerequisites + +You must have access to the following components: + +- Sheet with a specific car part from the Arena +- Access to the browser of your choice +- Printer from the Arena +- Vinyl paper for the printer + + +## Generate the QR code + +Follow the steps below to generate and download a QR code in .svg format: + + +- Visit the [QR Code Generator website](https://goqr.me) +- Make sure that **"Text"** is displayed below the "2. Contents" section + - If "Text" is not displayed, click the document icon on the left side under the "1. Type" section +- Enter the desired text in the empty field/box. In this case we need the following information: **CX:\:\** + - This is the \: + ``` + MPI0012 + ``` + - You can find the \ value on the car part information sheet +- Click **"Download"** on the right side below the QR code +- In the pop-up window, click on **"SVG"** and your QR code will be downloaded + +## Print the QR code + +- Open the downloaded .svg file +- Select **"Print"**: + - If you are using a Windows computer press ``` Ctrl + P ``` + - If you are using a Mac computer press ```command + P``` +- In the Print Settings window: + - in the Layout section, select **“Landscape”** + - click **“more settings”** + - select **"4”** in the Pages per sheet section + - click **"Print"** at the bottom left +- Your QR will be printed on the printer + + +## NOTICE + +This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode). + +- SPDX-License-Identifier: CC-BY-4.0 +- SPDX-FileCopyrightText: 2023, 2024 BMW AG +- SPDX-FileCopyrightText: 2023, 2024 CGI Deutschland B.V. & Co. KG +- SPDX-FileCopyrightText: 2024 Contributors to the Eclipse Foundation +- Source URL: https://github.com/eclipse-tractusx/digital-product-pass \ No newline at end of file diff --git a/dpp-tutorial/resources/digital-twins/car-dt-template.json b/dpp-tutorial/resources/digital-twins/car-dt-template.json new file mode 100644 index 000000000..350e2b13a --- /dev/null +++ b/dpp-tutorial/resources/digital-twins/car-dt-template.json @@ -0,0 +1,192 @@ +{ + "description": [ + { + "language": "en", + "text": "Car Digital Twin" + } + ], + "displayName": [], + "globalAssetId": "urn:uuid:e5ab3398-bde1-4ef2-bb70-fd6dd1138e59", + "idShort": "Car", + "id": "urn:dt-example-001", + "specificAssetIds": [ + { + "name": "partInstanceId", + "value": "PRT-30002", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL00000000001" + } + ] + } + }, + { + "name": "manufacturerPartId", + "value": "MPI0012", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL00000000001" + }, + { + "type": "GlobalReference", + "value": "PUBLIC_READABLE" + } + ] + } + }, + { + "name": "manufacturerId", + "value": "BPNL00000000001", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL00000000001" + } + ] + } + }, + { + "name": "digitalTwinType", + "value": "PartInstance", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL00000000001" + } + ] + } + } + ], + "submodelDescriptors": [ + { + "endpoints": [ + { + "interface": "SUBMODEL-3.0", + "protocolInformation": { + "href": "/api/public/data/urn:example-prtnumber", + "endpointProtocol": "HTTP", + "endpointProtocolVersion": ["1.1"], + "subprotocol": "DSP", + "subprotocolBody": "id=dpp-asset;dspEndpoint=", + "subprotocolBodyEncoding": "plain", + "securityAttributes": [ + { + "type": "NONE", + "key": "NONE", + "value": "NONE" + } + ] + } + } + ], + "idShort": "digitalProductPass", + "id": "urn:example-prtnumber", + "semanticId": { + "type": "ExternalReference", + "keys": [ + { + "type": "Submodel", + "value": "urn:samm:io.catenax.generic.digital_product_passport:2.0.0#DigitalProductPassport" + } + ] + }, + "description": [ + { + "language": "en", + "text": "Digital Product Pass Submodel" + } + ], + "displayName": [] + }, + { + "endpoints": [ + { + "interface": "SUBMODEL-3.0", + "protocolInformation": { + "href": "https://dpp.int.demo.catena-x.net/BPNL000000000000/api/public/data/urn:uuid:dea9dfe8-77a2-e7f9-ba78-e96ecc54528b", + "endpointProtocol": "HTTP", + "endpointProtocolVersion": ["1.1"], + "subprotocol": "DSP", + "subprotocolBody": "id=dpp-asset;dspEndpoint=https://dpp.int.demo.catena-x.net/BPNL000000000000", + "subprotocolBodyEncoding": "plain", + "securityAttributes": [ + { + "type": "NONE", + "key": "NONE", + "value": "NONE" + } + ] + } + } + ], + "idShort": "singleLevelBomAsBuilt", + "id": "urn:uuid:dea9dfe8-77a2-e7f9-ba78-e96ecc54528b", + "semanticId": { + "type": "ExternalReference", + "keys": [ + { + "type": "Submodel", + "value": "urn:bamm:io.catenax.single_level_bom_as_built:3.0.0#SingleLevelBomAsBuilt" + } + ] + }, + "description": [ + { + "language": "en", + "text": "Single level Bom As Built Submodel" + } + ], + "displayName": [] + }, + { + "endpoints": [ + { + "interface": "SUBMODEL-3.0", + "protocolInformation": { + "href": "https://dpp.int.demo.catena-x.net/BPNL000000000000/api/public/data/urn:uuid:58f2acd1-4c64-6fb1-7390-a340ef712334", + "endpointProtocol": "HTTP", + "endpointProtocolVersion": ["1.1"], + "subprotocol": "DSP", + "subprotocolBody": "id=dpp-asset;dspEndpoint=https://dpp.int.demo.catena-x.net/BPNL000000000000", + "subprotocolBodyEncoding": "plain", + "securityAttributes": [ + { + "type": "NONE", + "key": "NONE", + "value": "NONE" + } + ] + } + } + ], + "idShort": "SerialPart", + "id": "urn:uuid:58f2acd1-4c64-6fb1-7390-a340ef712334", + "semanticId": { + "type": "ExternalReference", + "keys": [ + { + "type": "Submodel", + "value": "urn:bamm:io.catenax.serial_part:1.0.1#SerialPart" + } + ] + }, + "description": [ + { + "language": "en", + "text": "DPP SerialPart Submodel" + } + ], + "displayName": [] + } + ] +} diff --git a/dpp-tutorial/resources/digital-twins/example-dt.json b/dpp-tutorial/resources/digital-twins/example-dt.json new file mode 100644 index 000000000..184b8324c --- /dev/null +++ b/dpp-tutorial/resources/digital-twins/example-dt.json @@ -0,0 +1,112 @@ +{ + "description": [ + { + "language": "en", + "text": "DPP Digital Twin" + } + ], + "displayName": [], + "globalAssetId": "urn:uuid:e5ab3398-bde1-4ef2-bb70-fd6dd1138e59", + "idShort": "", + "id": "", + "specificAssetIds": [ + { + "name": "partInstanceId", + "value": "", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL0073928UJ879" + } + ] + } + }, + { + "name": "manufacturerPartId", + "value": "MPI0012", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL0073928UJ879" + }, + { + "type": "GlobalReference", + "value": "PUBLIC_READABLE" + } + ] + } + }, + { + "name": "manufacturerId", + "value": "BPNL0073928UJ879", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL0073928UJ879" + } + ] + } + }, + { + "name": "digitalTwinType", + "value": "PartInstance", + "externalSubjectId": { + "type": "ExternalReference", + "keys": [ + { + "type": "GlobalReference", + "value": "BPNL0073928UJ879" + } + ] + } + } + ], + "submodelDescriptors": [ + { + "endpoints": [ + { + "interface": "SUBMODEL-3.0", + "protocolInformation": { + "href": "https://dpp.int.demo.catena-x.net/BPNL000000000000/api/public/data/", + "endpointProtocol": "HTTP", + "endpointProtocolVersion": ["1.1"], + "subprotocol": "DSP", + "subprotocolBody": "id=urn:uuid:0c3d2db0-e5c6-27f9-5875-15a9a00e7a27;dspEndpoint=https://dpp.int.demo.catena-x.net/BPNL000000000000", + "subprotocolBodyEncoding": "plain", + "securityAttributes": [ + { + "type": "NONE", + "key": "NONE", + "value": "NONE" + } + ] + } + } + ], + "idShort": "", + "id": "", + "semanticId": { + "type": "ExternalReference", + "keys": [ + { + "type": "Submodel", + "value": "urn:samm:io.catenax.generic.digital_product_passport:2.0.0#DigitalProductPassport" + } + ] + }, + "description": [ + { + "language": "en", + "text": "Digital Product Pass Submodel" + } + ], + "displayName": [] + } + ] +} diff --git a/dpp-tutorial/resources/payloads/example.json b/dpp-tutorial/resources/payloads/example.json new file mode 100644 index 000000000..74ef04a9a --- /dev/null +++ b/dpp-tutorial/resources/payloads/example.json @@ -0,0 +1,278 @@ +{ + "typology": { + "shortName": "8HP60", + "class": { + "definition": "Manual transmission (motor vehicle)", + "code": "44-09-02-02" + }, + "longName": "Product Description long text" + }, + "metadata": { + "predecessor": "null", + "issueDate": "2000-01-01", + "version": "1.0.0", + "economicOperator": { + "legitimization": "DE123456789", + "identification": "BPNL1234567890ZZ" + }, + "status": "draft", + "expirationDate": "2000-01-01" + }, + "characteristics": { + "physicalDimension": { + "grossWeight": { + "value": 20.5, + "unit": "unit:kilogram" + }, + "weightOrVolume": { + "left": { + "value": 20.5, + "unit": "unit:cubicMetre" + } + }, + "diameter": { + "value": 20.5, + "unit": "unit:millimetre" + }, + "grossVolume": { + "value": 20.5, + "unit": "unit:cubicMetre" + }, + "width": { + "value": 20.5, + "unit": "unit:millimetre" + }, + "length": { + "value": 20.5, + "unit": "unit:millimetre" + }, + "height": { + "value": 20.5, + "unit": "unit:millimetre" + } + }, + "lifespan": [ + { + "value": 36, + "unit": "unit:day", + "key": "guaranteed lifetime" + } + ], + "physicalState": "solid" + }, + "commercial": { + "placedOnMarket": "2000-01-01" + }, + "identification": { + "localIdentifier": { + "value": "SN12345678", + "key": "PartInstanceId" + }, + "additionalCode": [ + { + "value": "8703 24 10 00", + "key": "TARIC" + } + ], + "dataCarrier": { + "carrierType": "QR", + "carrierLayout": "upper-left side" + } + }, + "sources": [ + { + "header": "Sustainability Document Material XY", + "category": "Product Specifications", + "type": "URL", + "content": "www.alink.pdf" + } + ], + "handling": { + "spareParts": { + "left": { + "producer": [ + { + "id": "BPNL1234567890ZZ" + } + ], + "part": [ + { + "name": "Aluminum Housing", + "gtin": "12345678" + } + ] + } + }, + "substanceOfConcern": { + "left": [ + { + "name": { + "name": "phenolphthalein", + "type": "IUPAC" + }, + "location": "Housing", + "unit": "unit:partPerMillion", + "concentration": { + "left": [ + { + "max": 2.6, + "min": 2.1 + } + ] + }, + "exemption": "shall not apply to product x containing not more than 1,5 ml of liquid", + "id": [ + { + "type": "CAS", + "id": "201-004-7" + } + ] + } + ] + } + }, + "additionalData": [ + { + "description": "This is the machine parameters that are produced when the machine is used", + "label": "Specific Manufacturer Machine Parameters", + "type": { + "typeUnit": null, + "dataType": "object" + }, + "children": [ + { + "description": "The usage of the eletricity in the machine", + "label": "Eletricity Usage", + "type": { + "typeUnit": "unit:volts", + "dataType": "integer" + }, + "data": "25" + }, + { + "description": "The name of the machine that produced the product", + "label": "Machine Name", + "type": { + "typeUnit": null, + "dataType": "string" + }, + "data": "Laser Machine MX-421W" + }, + { + "description": "The list of products the machine can produce", + "label": "Product Names", + "type": { + "typeUnit": null, + "dataType": "array" + }, + "data": [ + "Tranmissions", + "Batteries", + "Seats", + "Doors" + ] + } + ] + }, + { + "description": "This are the properties of interest", + "label": "Properties of Interest", + "type": { + "typeUnit": null, + "dataType": "object" + }, + "children": [ + { + "description": "This are the main properties of interest", + "label": "Main Properties", + "type": { + "typeUnit": null, + "dataType": "object" + }, + "children": [ + { + "description": "This is the Normal temperature of production", + "label": "Normal Temperature", + "type": { + "typeUnit": "unit:celcius", + "dataType": "float" + }, + "data": 62.7 + }, + { + "description": "This is the minimmum temperature of production", + "label": "Minimum Temperature", + "type": { + "typeUnit": "unit:celcius", + "dataType": "float" + }, + "data": -80.68 + }, + { + "description": "This is the maximum temperature of production", + "label": "Maximum Temperature", + "type": { + "typeUnit": "unit:celcius", + "dataType": "float" + }, + "data": 800.85 + } + ] + } + ] + } + ], + "sustainability": { + "PEF": { + "carbon": [ + { + "lifecycle": "main product production", + "rulebook": "https://www.cx-pcf-rulebook.pdf/", + "unit": "kg CO2 eq", + "type": "Climate Change Total", + "value": 12.678 + } + ] + }, + "state": "first life", + "material": { + "left": [ + { + "name": { + "name": "phenolphthalein", + "type": "IUPAC" + }, + "unit": "unit:partPerMillion", + "recycled": false, + "id": [ + { + "type": "CAS", + "id": "201-004-7" + } + ], + "value": 5, + "renewable": true + } + ] + }, + "critical": { + "left": [ + "Lythium", + "Uranium" + ] + } + }, + "operation": { + "importer": { + "left": { + "eori": "GB123456789000", + "id": "BPNL1234567890ZZ" + } + }, + "manufacturer": { + "facility": "BPNS1234567890ZZ", + "manufacturingDate": "2000-01-31", + "manufacturer": "BPNL1234567890ZZ" + } + } + } \ No newline at end of file diff --git a/dpp-tutorial/resources/screenshots/agreebutton.png b/dpp-tutorial/resources/screenshots/agreebutton.png new file mode 100644 index 000000000..66c362d88 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/agreebutton.png differ diff --git a/dpp-tutorial/resources/screenshots/characteristics.png b/dpp-tutorial/resources/screenshots/characteristics.png new file mode 100644 index 000000000..34f289f33 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/characteristics.png differ diff --git a/dpp-tutorial/resources/screenshots/company-selection.png b/dpp-tutorial/resources/screenshots/company-selection.png new file mode 100644 index 000000000..874789490 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/company-selection.png differ diff --git a/dpp-tutorial/resources/screenshots/dpp-example.png b/dpp-tutorial/resources/screenshots/dpp-example.png new file mode 100644 index 000000000..a039e4e40 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/dpp-example.png differ diff --git a/dpp-tutorial/resources/screenshots/id-search.png b/dpp-tutorial/resources/screenshots/id-search.png new file mode 100644 index 000000000..f55f37723 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/id-search.png differ diff --git a/dpp-tutorial/resources/screenshots/idsearch.png b/dpp-tutorial/resources/screenshots/idsearch.png new file mode 100644 index 000000000..ed0abec8f Binary files /dev/null and b/dpp-tutorial/resources/screenshots/idsearch.png differ diff --git a/dpp-tutorial/resources/screenshots/loading-notcompletedyet.png b/dpp-tutorial/resources/screenshots/loading-notcompletedyet.png new file mode 100644 index 000000000..0ec7975e8 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/loading-notcompletedyet.png differ diff --git a/dpp-tutorial/resources/screenshots/loading.png b/dpp-tutorial/resources/screenshots/loading.png new file mode 100644 index 000000000..edf011aeb Binary files /dev/null and b/dpp-tutorial/resources/screenshots/loading.png differ diff --git a/dpp-tutorial/resources/screenshots/pcf-info.png b/dpp-tutorial/resources/screenshots/pcf-info.png new file mode 100644 index 000000000..3b43f0159 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/pcf-info.png differ diff --git a/dpp-tutorial/resources/screenshots/pcf-update.png b/dpp-tutorial/resources/screenshots/pcf-update.png new file mode 100644 index 000000000..6172a4a48 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/pcf-update.png differ diff --git a/dpp-tutorial/resources/screenshots/policy-selectionpopup.png b/dpp-tutorial/resources/screenshots/policy-selectionpopup.png new file mode 100644 index 000000000..119651c3c Binary files /dev/null and b/dpp-tutorial/resources/screenshots/policy-selectionpopup.png differ diff --git a/dpp-tutorial/resources/screenshots/qrcode-button.png b/dpp-tutorial/resources/screenshots/qrcode-button.png new file mode 100644 index 000000000..cd53bca17 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/qrcode-button.png differ diff --git a/dpp-tutorial/resources/screenshots/qrcode-scanning.png b/dpp-tutorial/resources/screenshots/qrcode-scanning.png new file mode 100644 index 000000000..f96dd1d14 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/qrcode-scanning.png differ diff --git a/dpp-tutorial/resources/screenshots/test-login.png b/dpp-tutorial/resources/screenshots/test-login.png new file mode 100644 index 000000000..a903ca693 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/test-login.png differ diff --git a/dpp-tutorial/resources/screenshots/visualization.png b/dpp-tutorial/resources/screenshots/visualization.png new file mode 100644 index 000000000..314163a12 Binary files /dev/null and b/dpp-tutorial/resources/screenshots/visualization.png differ diff --git a/dpp-tutorial/resources/test-data/bomAsBuiltRelationships.json b/dpp-tutorial/resources/test-data/bomAsBuiltRelationships.json new file mode 100644 index 000000000..58d016b2e --- /dev/null +++ b/dpp-tutorial/resources/test-data/bomAsBuiltRelationships.json @@ -0,0 +1,324 @@ +{ + "urn:uuid:c28098f6-6996-4a77-be8d-497fd9f60fc6": { + "catenaXId": "urn:uuid:c28098f6-6996-4a77-be8d-497fd9f60fc6", + "childItems": [ + { + "catenaXId": "urn:uuid:0d5d59ab-93b3-49f7-9a8c-48f9b96747ab", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:2120821b-7274-4bf3-8499-31cefc455fa0", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:500388e5-be9a-4c58-8f11-404218f76259", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:fbc89d8d-f60f-4a4f-a553-b379f28eecb6", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:8ac58560-3bbb-4d3a-a55e-a6cebddc6ed9", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:365e997e-d001-4962-b023-f637e43d6444", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:cf80c23e-5dc7-45b8-8de5-16fe09556d63", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:5fc6fa4c-1e79-46bf-a374-fcb77f0c411f", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:ad0677c8-fa6d-47f1-86a5-77c8861111a5", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:0d5d59ab-93b3-49f7-9a8c-48f9b96747ab": { + "catenaXId": "urn:uuid:0d5d59ab-93b3-49f7-9a8c-48f9b96747ab", + "childItems": [] + }, + "urn:uuid:2120821b-7274-4bf3-8499-31cefc455fa0": { + "catenaXId": "urn:uuid:2120821b-7274-4bf3-8499-31cefc455fa0", + "childItems": [] + }, + "urn:uuid:500388e5-be9a-4c58-8f11-404218f76259": { + "catenaXId": "urn:uuid:500388e5-be9a-4c58-8f11-404218f76259", + "childItems": [] + }, + "urn:fbc89d8d-f60f-4a4f-a553-b379f28eecb6": { + "catenaXId": "urn:uuid:fbc89d8d-f60f-4a4f-a553-b379f28eecb6", + "childItems": [] + }, + "urn:uuid:8ac58560-3bbb-4d3a-a55e-a6cebddc6ed9": { + "catenaXId": "urn:uuid:8ac58560-3bbb-4d3a-a55e-a6cebddc6ed9", + "childItems": [] + }, + "urn:uuid:365e997e-d001-4962-b023-f637e43d6444": { + "catenaXId": "urn:uuid:365e997e-d001-4962-b023-f637e43d6444", + "childItems": [] + }, + "urn:uuid:cf80c23e-5dc7-45b8-8de5-16fe09556d63": { + "catenaXId": "urn:uuid:cf80c23e-5dc7-45b8-8de5-16fe09556d63", + "childItems": [] + }, + "urn:uuid:5fc6fa4c-1e79-46bf-a374-fcb77f0c411f": { + "catenaXId": "urn:uuid:5fc6fa4c-1e79-46bf-a374-fcb77f0c411f", + "childItems": [] + }, + "urn:uuid:ad0677c8-fa6d-47f1-86a5-77c8861111a5": { + "catenaXId": "urn:uuid:ad0677c8-fa6d-47f1-86a5-77c8861111a5", + "childItems": [] + }, + "urn:uuid:680c4a01-e8a7-4b1a-934f-261449b98206": { + "catenaXId": "urn:uuid:680c4a01-e8a7-4b1a-934f-261449b98206", + "childItems": [] + }, + "urn:uuid:618c2cf5-acfb-4b54-b2ff-a5483f90c8e6": { + "catenaXId": "urn:uuid:618c2cf5-acfb-4b54-b2ff-a5483f90c8e6", + "childItems": [] + }, + "urn:uuid:48acc23b-7cb8-4288-b620-9eb3d9dce6bf": { + "catenaXId": "urn:uuid:48acc23b-7cb8-4288-b620-9eb3d9dce6bf", + "childItems": [ + { + "catenaXId": "urn:uuid:f10c0181-ce80-4139-81f0-a59226c88bfe", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:12e656bb-948e-44eb-9b5e-88d7deedf388", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:f10c0181-ce80-4139-81f0-a59226c88bfe": { + "catenaXId": "urn:uuid:f10c0181-ce80-4139-81f0-a59226c88bfe", + "childItems": [] + }, + "urn:uuid:12e656bb-948e-44eb-9b5e-88d7deedf388": { + "catenaXId": "urn:uuid:12e656bb-948e-44eb-9b5e-88d7deedf388", + "childItems": [] + }, + "urn:uuid:2854cc7b-b815-4db0-ab10-047b4965c867": { + "catenaXId": "urn:uuid:2854cc7b-b815-4db0-ab10-047b4965c867", + "childItems": [ + { + "catenaXId": "urn:uuid:0b55ea93-7c5f-4f93-a2c9-9842f327a630", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:0b55ea93-7c5f-4f93-a2c9-9842f327a630": { + "catenaXId": "urn:uuid:0b55ea93-7c5f-4f93-a2c9-9842f327a630", + "childItems": [] + }, + "urn:uuid:6512af5a-31dd-4a0f-ae9f-d0814e6f680b": { + "catenaXId": "urn:uuid:6512af5a-31dd-4a0f-ae9f-d0814e6f680b", + "childItems": [ + { + "catenaXId": "urn:uuid:202a175a-2b79-481f-8c4e-8bcc5c478f0e", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:202a175a-2b79-481f-8c4e-8bcc5c478f0e": { + "catenaXId": "urn:uuid:202a175a-2b79-481f-8c4e-8bcc5c478f0e", + "childItems": [] + }, + "urn:uuid:3bff7e1c-3297-4a8d-9243-eb0dacf3266e": { + "catenaXId": "urn:uuid:3bff7e1c-3297-4a8d-9243-eb0dacf3266e", + "childItems": [ + { + "catenaXId": "urn:uuid:084eb265-6c63-4fe6-bd7c-b0c697e27354", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:084eb265-6c63-4fe6-bd7c-b0c697e27354": { + "catenaXId": "urn:uuid:084eb265-6c63-4fe6-bd7c-b0c697e27354", + "childItems": [] + }, + "urn:uuid:a62faa9a-7a3d-4a02-9fba-186243361350": { + "catenaXId": "urn:uuid:a62faa9a-7a3d-4a02-9fba-186243361350", + "childItems": [ + { + "catenaXId": "urn:uuid:51806f42-c4b5-4fbc-be28-8a4524d4785f", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:51806f42-c4b5-4fbc-be28-8a4524d4785f": { + "catenaXId": "urn:uuid:51806f42-c4b5-4fbc-be28-8a4524d4785f", + "childItems": [] + }, + "urn:uuid:97568dae-4691-4a10-9c15-1ef7338490eb": { + "catenaXId": "urn:uuid:97568dae-4691-4a10-9c15-1ef7338490eb", + "childItems": [] + }, + "urn:uuid:5cfc51b0-0a57-42da-9411-1e02d7154c49": { + "catenaXId": "urn:uuid:5cfc51b0-0a57-42da-9411-1e02d7154c49", + "childItems": [] + }, + "urn:uuid:77311eb4-36bd-4d3c-b7b2-fd6e51433887": { + "catenaXId": "urn:uuid:77311eb4-36bd-4d3c-b7b2-fd6e51433887", + "childItems": [] + }, + "urn:uuid:8c407040-ef41-4241-8b7a-c45695e879a7": { + "catenaXId": "urn:uuid:8c407040-ef41-4241-8b7a-c45695e879a7", + "childItems": [] + }, + "urn:uuid:adc5d909-8a9e-4f04-9237-131863096cae": { + "catenaXId": "urn:uuid:adc5d909-8a9e-4f04-9237-131863096cae", + "childItems": [] + }, + "urn:uuid:ea781f61-33b0-4ddb-a4c1-767d9a1c6f41": { + "catenaXId": "urn:uuid:ea781f61-33b0-4ddb-a4c1-767d9a1c6f41", + "childItems": [] + }, + "urn:uuid:f748848c-f6dc-4d84-be34-e26e5deb0189": { + "catenaXId": "urn:uuid:f748848c-f6dc-4d84-be34-e26e5deb0189", + "childItems": [ + { + "catenaXId": "urn:uuid:a2aa762f-84e0-4689-b310-55b9d539974f", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + }, + { + "catenaXId": "urn:uuid:e7ffe0cd-7a6d-45f8-a6c6-44fca3053319", + "quantity": { + "value": 1.0, + "unit": "unit:piece" + }, + "hasAlternatives": false, + "createdOn": "2022-02-03T14:48:54.709Z", + "businessPartner": "BPNL0073928UJ879", + "lastModifiedOn": "2022-02-03T14:48:54.709Z" + } + ] + }, + "urn:uuid:a2aa762f-84e0-4689-b310-55b9d539974f": { + "catenaXId": "urn:uuid:a2aa762f-84e0-4689-b310-55b9d539974f", + "childItems": [] + }, + "urn:uuid:e7ffe0cd-7a6d-45f8-a6c6-44fca3053319": { + "catenaXId": "urn:uuid:e7ffe0cd-7a6d-45f8-a6c6-44fca3053319", + "childItems": [] + } +} \ No newline at end of file diff --git a/dpp-tutorial/resources/test-data/carParts.json b/dpp-tutorial/resources/test-data/carParts.json new file mode 100644 index 000000000..d33ce8b51 --- /dev/null +++ b/dpp-tutorial/resources/test-data/carParts.json @@ -0,0 +1,496 @@ +{ + "c28098f6-6996-4a77-be8d-497fd9f60fc6": { + "Name": "CHASSIS", + "PCF (Product Carbon Footprint)": "884 kgCO2e", + "Height": "54 cm", + "Width": "182 cm", + "Length": "468 cm", + "Weight": "387 kg", + "id": "c28098f6-6996-4a77-be8d-497fd9f60fc6", + "Part Instance ID": "BFH-4459", + "Manufacturing Date": "22.12.2023", + "Placed on Market Date": "15.01.2024", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "36 months", + "Children": { + "0d5d59ab-93b3-49f7-9a8c-48f9b96747ab": { + "Name":"FIREWALL", + "PCF (Product Carbon Footprint)": "520 kgCO2e", + "Height": "67 cm", + "Width": "179 cm", + "Length": "27cm", + "Weight": "23 kg", + "id": "0d5d59ab-93b3-49f7-9a8c-48f9b96747ab", + "Part Instance ID": "JFU-9853", + "Manufacturing Date": "14.12.2023", + "Placed on Market Date": "15.01.2024", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "36 months" + }, + "2120821b-7274-4bf3-8499-31cefc455fa0": { + "Name":"TRUNK FLOOR PAN", + "PCF (Product Carbon Footprint)": "269 kgCO2e", + "Height": "38 cm", + "Width": "112 cm", + "Length": "114 cm", + "Weight": "8.3 kg", + "id": "2120821b-7274-4bf3-8499-31cefc455fa0", + "Part Instance ID": "TBF-5739", + "Manufacturing Date": "27.08.2023", + "Placed on Market Date": "15.09.2023", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "12 months" + }, + "500388e5-be9a-4c58-8f11-404218f76259": { + "Name":"FLOOR PAN", + "PCF (Product Carbon Footprint)": "536 kgCO2e", + "Height": "18 cm", + "Width": "176 cm", + "Length": "197 cm", + "Weight": "129.4 kg", + "id": "500388e5-be9a-4c58-8f11-404218f76259", + "Part Instance ID": "NRS-8901", + "Manufacturing Date": "14.11.2023", + "Placed on Market Date": "20.12.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + }, + "fbc89d8d-f60f-4a4f-a553-b379f28eecb6": { + "Name":"A-PILLAR (LEFT)", + "PCF (Product Carbon Footprint)": "289 kgCO2e", + "Height": "13 cm", + "Width": "10 cm", + "Length": "110 cm", + "Weight": "20 kg", + "id": "fbc89d8d-f60f-4a4f-a553-b379f28eecb6", + "Part Instance ID": "AGL-8901", + "Manufacturing Date": "19.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + }, + "8ac58560-3bbb-4d3a-a55e-a6cebddc6ed9": { + "Name":"A-PILLAR (RIGHT)", + "PCF (Product Carbon Footprint)": "289 kgCO2e", + "Height": "13 cm", + "Width": "10 cm", + "Length": "110 cm", + "Weight": "20 kg", + "id": "8ac58560-3bbb-4d3a-a55e-a6cebddc6ed9", + "Part Instance ID": "AGR-7462", + "Manufacturing Date": "19.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + }, + "365e997e-d001-4962-b023-f637e43d6444": { + "Name":"B-PILLAR (LEFT)", + "PCF (Product Carbon Footprint)": "294 kgCO2e", + "Height": "14 cm", + "Width": "12 cm", + "Length": "120 cm", + "Weight": "21.7 kg", + "id": "365e997e-d001-4962-b023-f637e43d6444", + "Part Instance ID": "BNL-9012", + "Manufacturing Date": "22.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + }, + "cf80c23e-5dc7-45b8-8de5-16fe09556d63": { + "Name":"B-PILLAR (RIGHT)", + "PCF (Product Carbon Footprint)": "294 kgCO2e", + "Height": "14 cm", + "Width": "12 cm", + "Length": "120 cm", + "Weight": "21.7 kg", + "id": "cf80c23e-5dc7-45b8-8de5-16fe09556d63", + "Part Instance ID": "BNR-9387", + "Manufacturing Date": "22.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + }, + "5fc6fa4c-1e79-46bf-a374-fcb77f0c411f": { + "Name":"C-PILLAR (LEFT)", + "PCF (Product Carbon Footprint)": "299 kgCO2e", + "Height": "15.5 cm", + "Width": "14 cm", + "Length": "128 cm", + "Weight": "23.4 kg", + "id": "5fc6fa4c-1e79-46bf-a374-fcb77f0c411f", + "Part Instance ID": "CNL-7452", + "Manufacturing Date": "22.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + }, + "ad0677c8-fa6d-47f1-86a5-77c8861111a5": { + "Name":"C-PILLAR (RIGHT)", + "PCF (Product Carbon Footprint)": "299 kgCO2e", + "Height": "15.5 cm", + "Width": "14 cm", + "Length": "128 cm", + "Weight": "23.4 kg", + "id": "ad0677c8-fa6d-47f1-86a5-77c8861111a5", + "Part Instance ID": "CNR-7593", + "Manufacturing Date": "22.04.2023", + "Placed on Market Date": "01.06.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "22 months" + } + } + }, + "680c4a01-e8a7-4b1a-934f-261449b98206": { + "Name":"HOOD PANEL", + "PCF (Product Carbon Footprint)": "503 kgCO2e", + "Height": "8 cm", + "Width": "149 cm", + "Length": "176 cm", + "Weight": "11.4 kg", + "id": "680c4a01-e8a7-4b1a-934f-261449b98206", + "Part Instance ID": "DEF-5678", + "Manufacturing Date": "17.08.2022", + "Placed on Market Date": "29.09.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "12 months" + }, + "618c2cf5-acfb-4b54-b2ff-a5483f90c8e6": { + "Name":"ROOF PANEL", + "PCF (Product Carbon Footprint)": "521 kgCO2e", + "Height": "105 cm", + "Width": "145.6 cm", + "Length": "193.2 cm", + "Weight": "52.3 kg", + "id": "618c2cf5-acfb-4b54-b2ff-a5483f90c8e6", + "Part Instance ID": "GHI-9012", + "Manufacturing Date": "06.03.2022", + "Placed on Market Date": "26.04.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "12 months" + }, + "48acc23b-7cb8-4288-b620-9eb3d9dce6bf": { + "Name":"TRUNK LID", + "PCF (Product Carbon Footprint)": "412 kgCO2e", + "Height": "19 cm", + "Width": "124 cm", + "Length": "102 cm", + "Weight": "16.5 kg", + "id": "48acc23b-7cb8-4288-b620-9eb3d9dce6bf", + "Part Instance ID": "JKL-3456", + "Manufacturing Date": "13.10.2022", + "Placed on Market Date": "09.11.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "12 months", + "Children": { + "f10c0181-ce80-4139-81f0-a59226c88bfe": { + "Name":"TRUNK LID HINGE (LEFT)", + "PCF (Product Carbon Footprint)": "189 kgCO2e", + "Height": "24 cm", + "Width": "2 cm", + "Length": "38 cm", + "Weight": "1.4 kg", + "id": "f10c0181-ce80-4139-81f0-a59226c88bfe", + "Part Instance ID": "DLH-5159", + "Manufacturing Date": "01.12.2023", + "Placed on Market Date": "15.01.2024", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + }, + "12e656bb-948e-44eb-9b5e-88d7deedf388": { + "Name":"TRUNK LID HINGE (RIGHT)", + "PCF (Product Carbon Footprint)": "189 kgCO2e", + "Height": "24 cm", + "Width": "2 cm", + "Length": "38 cm", + "Weight": "1.4 kg", + "id": "12e656bb-948e-44eb-9b5e-88d7deedf388", + "Part Instance ID": "DLR-4637", + "Manufacturing Date": "01.12.2023", + "Placed on Market Date": "15.01.2024", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } + } + }, + "2854cc7b-b815-4db0-ab10-047b4965c867": { + "Name":"FRONT DOOR (LEFT)", + "PCF (Product Carbon Footprint)": "389 kgCO2e", + "Height": "118 cm", + "Width": "10 cm", + "Length": "87 cm", + "Weight": "23.3 kg", + "id": "2854cc7b-b815-4db0-ab10-047b4965c867", + "Part Instance ID": "FQL-7890", + "Manufacturing Date": "27.11.2022", + "Placed on Market Date": "15.12.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months", + "Children": { + "0b55ea93-7c5f-4f93-a2c9-9842f327a630": { + "Name": "DOOR HINGE (FRONT-LEFT)", + "PCF (Product Carbon Footprint)": "271 kgCO2e", + "Height": "3 cm", + "Width": "1.3 cm", + "Length": "14 cm", + "Weight": "0.6 kg", + "id": "0b55ea93-7c5f-4f93-a2c9-9842f327a630", + "Part Instance ID": "WXL-7341", + "Manufacturing Date": "12.09.2023", + "Placed on Market Date": "11.10.2023", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } + } + }, + "6512af5a-31dd-4a0f-ae9f-d0814e6f680b": { + "Name":"FRONT DOOR (RIGHT)", + "PCF (Product Carbon Footprint)": "389 kgCO2e", + "Height": "118 cm", + "Width": "10 cm", + "Length": "87 cm", + "Weight": "23.3 kg", + "id": "6512af5a-31dd-4a0f-ae9f-d0814e6f680b", + "Part Instance ID": "FQR-9275", + "Manufacturing Date": "27.11.2022", + "Placed on Market Date": "15.12.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months", + "Children": { + "202a175a-2b79-481f-8c4e-8bcc5c478f0e": { + "Name":"DOOR HINGE (FRONT-RIGHT)", + "PCF (Product Carbon Footprint)": "271 kgCO2e", + "Height": "3 cm", + "Width": "1.3 cm", + "Length": "14 cm", + "Weight": "0.6 kg", + "id": "202a175a-2b79-481f-8c4e-8bcc5c478f0e", + "Part Instance ID": "WXR-2837", + "Manufacturing Date": "12.09.2023", + "Placed on Market Date": "11.10.2023", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } + } + }, + "3bff7e1c-3297-4a8d-9243-eb0dacf3266e": { + "Name":"REAR DOOR (LEFT)", + "PCF (Product Carbon Footprint)": "394 kgCO2e", + "Height": "118 cm", + "Width": "10 cm", + "Length": "89 cm", + "Weight": "23.8 kg", + "id": "3bff7e1c-3297-4a8d-9243-eb0dacf3266e", + "Part Instance ID": "RWL-6789", + "Manufacturing Date": "23.11.2022", + "Placed on Market Date": "12.12.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months", + "Children": { + "084eb265-6c63-4fe6-bd7c-b0c697e27354": { + "Name":"DOOR HINGE (REAR-LEFT)", + "PCF (Product Carbon Footprint)": "271 kgCO2e", + "Height": "3 cm", + "Width": "1.3 cm", + "Length": "14 cm", + "Weight": "0.6 kg", + "id": "084eb265-6c63-4fe6-bd7c-b0c697e27354", + "Part Instance ID": "CDL-0312", + "Manufacturing Date": "13.09.2023", + "Placed on Market Date": "18.10.2023", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } + } + }, + "a62faa9a-7a3d-4a02-9fba-186243361350": { + "Name":"REAR DOOR (RIGHT)", + "PCF (Product Carbon Footprint)": "394 kgCO2e", + "Height": "118 cm", + "Width": "10 cm", + "Length": "89 cm", + "Weight": "23.8 kg", + "id": "a62faa9a-7a3d-4a02-9fba-186243361350", + "Part Instance ID": "RWR-9687", + "Manufacturing Date": "23.11.2022", + "Placed on Market Date": "12.12.2022", + "List of Materials": "Steel", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months", + "Children": { + "51806f42-c4b5-4fbc-be28-8a4524d4785f": { + "Name":"DOOR HINGE (REAR-RIGHT)", + "PCF (Product Carbon Footprint)": "271 kgCO2e", + "Height": "3 cm", + "Width": "1.3 cm", + "Length": "14 cm", + "Weight": "0.6 kg", + "id": "51806f42-c4b5-4fbc-be28-8a4524d4785f", + "Part Instance ID": "CDR-6475", + "Manufacturing Date": "13.09.2023", + "Placed on Market Date": "18.10.2023", + "List of Materials": "Aluminum", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "24 months" + } + } + }, + "97568dae-4691-4a10-9c15-1ef7338490eb": { + "Name":"QUARTER PANEL (LEFT)", + "PCF (Product Carbon Footprint)": "325 kgCO2e", + "Height": "60 cm", + "Width": "5 cm", + "Length": "90 cm", + "Weight": "9 kg", + "id": "97568dae-4691-4a10-9c15-1ef7338490eb", + "Part Instance ID": "YZL-4567", + "Manufacturing Date": "15.03.2023", + "Placed on Market Date": "1.04.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "15 months" + }, + "5cfc51b0-0a57-42da-9411-1e02d7154c49": { + "Name":"QUARTER PANEL (RIGHT)", + "PCF (Product Carbon Footprint)": "325 kgCO2e", + "Height": "60 cm", + "Width": "5 cm", + "Length": "90 cm", + "Weight": "9 kg", + "id": "5cfc51b0-0a57-42da-9411-1e02d7154c49", + "Part Instance ID": "YZR-8901", + "Manufacturing Date": "15.03.2023", + "Placed on Market Date": "1.04.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "15 months" + }, + "77311eb4-36bd-4d3c-b7b2-fd6e51433887": { + "Name":"FENDER (LEFT)", + "PCF (Product Carbon Footprint)": "321 kgCO2e", + "Height": "50 cm", + "Width": "1 cm", + "Length": "87 cm", + "Weight": "7 kg", + "id": "77311eb4-36bd-4d3c-b7b2-fd6e51433887", + "Part Instance ID": "EFL-9283", + "Manufacturing Date": "18.03.2023", + "Placed on Market Date": "11.04.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "15 months" + }, + "8c407040-ef41-4241-8b7a-c45695e879a7": { + "Name":"FENDER (RIGHT)", + "PCF (Product Carbon Footprint)": "321 kgCO2e", + "Height": "50 cm", + "Width": "1 cm", + "Length": "87 cm", + "Weight": "7 kg", + "id": "8c407040-ef41-4241-8b7a-c45695e879a7", + "Part Instance ID": "EFR-7923", + "Manufacturing Date": "18.03.2023", + "Placed on Market Date": "11.04.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "15 months" + }, + "adc5d909-8a9e-4f04-9237-131863096cae": { + "Name":"ROCKER PANEL (LEFT)", + "PCF (Product Carbon Footprint)": "255 kgCO2e", + "Height": "15 cm", + "Width": "18 cm", + "Length": "179 cm", + "Weight": "6.5 kg", + "id": "adc5d909-8a9e-4f04-9237-131863096cae", + "Part Instance ID": "NOL-3201", + "Manufacturing Date": "01.10.2023", + "Placed on Market Date": "28.10.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months" + }, + "ea781f61-33b0-4ddb-a4c1-767d9a1c6f41": { + "Name":"ROCKER PANEL (RIGHT)", + "PCF (Product Carbon Footprint)": "255 kgCO2e", + "Height": "15 cm", + "Width": "18 cm", + "Length": "179 cm", + "Weight": "6.5 kg", + "id": "ea781f61-33b0-4ddb-a4c1-767d9a1c6f41", + "Part Instance ID": "NOR-7564", + "Manufacturing Date": "01.10.2023", + "Placed on Market Date": "28.10.2023", + "List of Materials": "Aluminum, Steel ", + "Hazard Materials": "Lead, Butyl, Cyanoacrylates, Polyurethane", + "Guarantee": "18 months" + }, + "f748848c-f6dc-4d84-be34-e26e5deb0189": { + "Name":"WIRES", + "PCF (Product Carbon Footprint)": "456 kgCO2e", + "Height": "3 cm", + "Width": "3 cm", + "Length": "919 m", + "Weight": "43 kg", + "id": "f748848c-f6dc-4d84-be34-e26e5deb0189", + "Part Instance ID": "LEC-5237", + "Manufacturing Date": "01.10.2023", + "Placed on Market Date": "01.12.2023", + "List of Materials": "Copper, Teflon, Polyvinyl Chloride, Brass, Tin, Plastic", + "Hazard Materials": "Lead, Mercury, Cadmium, Polyvinyl Chloride, Asbestos", + "Guarantee": "24 months", + "Children" : { + "a2aa762f-84e0-4689-b310-55b9d539974f": { + "Name":"FUSE BOX (A)", + "PCF (Product Carbon Footprint)": "243 kgCO2e", + "Height": "8 cm", + "Width": "8 cm", + "Length": "21 cm", + "Weight": "0.7 kg", + "id": "a2aa762f-84e0-4689-b310-55b9d539974f", + "Part Instance ID": "FUJ-9375", + "Manufacturing Date": "13.10.2023", + "Placed on Market Date": "01.11.2024", + "List of Materials": "Plastic, Polypropylene, Ceramic", + "Hazard Materials": "Lead, Polyvinyl Chloride, Rubber", + "Guarantee": "24 months" + }, + "e7ffe0cd-7a6d-45f8-a6c6-44fca3053319": { + "Name":"FUSE BOX (B)", + "PCF (Product Carbon Footprint)": "269 kgCO2e", + "Height": "15 cm", + "Width": "8 cm", + "Length": "19 cm", + "Weight": "0.7 kg", + "id": "e7ffe0cd-7a6d-45f8-a6c6-44fca3053319", + "Part Instance ID": "FUJ-8362", + "Manufacturing Date": "13.10.2023", + "Placed on Market Date": "01.11.2024", + "List of Materials": "Plastic, Polypropylene, Ceramic", + "Hazard Materials": "Lead, Polyvinyl Chloride, Rubber", + "Guarantee": "24 months" + } + } + } +} \ No newline at end of file diff --git a/dpp-tutorial/resources/test-data/serialPartItems.json b/dpp-tutorial/resources/test-data/serialPartItems.json new file mode 100644 index 000000000..ac92e6182 --- /dev/null +++ b/dpp-tutorial/resources/test-data/serialPartItems.json @@ -0,0 +1,39 @@ + +{ + "urn:uuid:c28098f6-6996-4a77-be8d-497fd9f60fc6": { + "localIdentifiers" : [ { + "value" : "BFH-4459", + "key" : "partInstanceId" + } ], + "manufacturingInformation" : { + "date" : "2022-02-04T14:48:54", + "country" : "DE" + }, + "catenaXId" : "urn:uuid:c28098f6-6996-4a77-be8d-497fd9f60fc6", + "partTypeInformation" : { + "manufacturerPartId" : "MPI0012", + "customerPartId" : "BFH-4459", + "classification" : "product", + "nameAtManufacturer" : "CHASSIS", + "nameAtCustomer" : "CHASSIS" + } + }, + "urn:uuid:0d5d59ab-93b3-49f7-9a8c-48f9b96747ab": { + "localIdentifiers" : [ { + "value" : "JFU-9853", + "key" : "partInstanceId" + } ], + "manufacturingInformation" : { + "date" : "2022-02-04T14:48:54", + "country" : "DE" + }, + "catenaXId" : "urn:uuid:0d5d59ab-93b3-49f7-9a8c-48f9b96747ab", + "partTypeInformation" : { + "manufacturerPartId" : "MPI0012", + "customerPartId" : "JFU-9853", + "classification" : "product", + "nameAtManufacturer" : "FIREWALL", + "nameAtCustomer" : "FIREWALL" + } + } +} \ No newline at end of file