diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8d0bad4c..f8f04254 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,4 +18,4 @@ jobs:
- run: git config user.name github-actions
- run: git config user.email github-actions@github.com
- run: git fetch origin gh-pages --depth=1
- - run: mike deploy --push --update-aliases 1.0
\ No newline at end of file
+ - run: mike deploy --push --update-aliases 2.0 latest
diff --git a/LICENCE.md b/LICENCE.md
index 6022f4b8..171ada49 100644
--- a/LICENCE.md
+++ b/LICENCE.md
@@ -1 +1,204 @@
-This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).
+
+ Copyright (c) 2021-23 Open Data Manchester CIC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/docs/1_Start_Here/1_1_Introduction.md b/docs/1_Start_Here/1_1_Introduction.md
index 267b7b7c..f8dcf4c3 100644
--- a/docs/1_Start_Here/1_1_Introduction.md
+++ b/docs/1_Start_Here/1_1_Introduction.md
@@ -7,25 +7,13 @@ description: Introduction to the Open 3P open data standard for the packaging va
## What is the Open 3P?
-Open 3P is an open data standard for packaging. It has been developed as part of the Plastics Packaging Portals (PPP) Project, an Innovate UK supported project under the Smart Sustainable Plastic Packaging (SSPP) Fund. The project is led by OPRL alongside project partners Open Data Manchester, Dsposal, RECOUP, and Ecosurety.
+Open 3P is an open data standard for the packaging industry, which is being developed by Open Data Manchester in collaboration with over 120 individuals from 70 organisations across the packaging supply chain. The goal of Open 3P is to establish a common language for exchanging and sharing data related to packaging materials and processes, which will help to improve transparency and accountability in the industry.
-The project brings together stakeholders from the entire packaging ecosystem to explore how we might create the foundations for systemic change
-in the packaging value chain. We have had more than 80 individuals from over 40 organisations take part in our workshops, interviews and research and we are incredibly grateful to them for sharing their time, expertise and support.
+With Open 3P, stakeholders in the packaging supply chain will be able to share information about materials, components and packaging in a standardised format. This will allow for better collaboration between manufacturers, retailers, recyclers, regulators, and consumers. By creating a common understanding of the materials and processes involved in packaging, it will be easier to identify opportunities for reducing waste, increasing efficiency, and improving sustainability throughout the supply chain.
-PPP has 5 main aims which will be delivered by 30th November 2022:
+The first phase of the project brought together stakeholders from the entire packaging ecosystem to explore how we might create the foundations for systemic change in the packaging value chain. We had more than 120 individuals from over 70 organisations take part in our workshops, interviews and research and we are incredibly grateful to them for sharing their time, expertise and support.
-1. Extend the Open3R Household Waste Recycling Centre (HWRCs) [data standard](https://opendatamanchester.github.io/Open3R/){target=_blank}
-2. Develop a prototype portal to capture data on geographically located recycling services such as HWRCs, bring banks, instore take back schemes
-to support a comprehensive open database of this information
-3. Develop an open standard for plastic packaging data (Open 3P)
-4. Develop a prototype portal to capture packaging attribute data to enable it to be shared along the plastic packaging value chain and reported on
-5. Determine a sustainable business model and governance structure
-
-Although this funding and this phase of the project is focussed on plastic packaging, which is what Open 3P covers currently, there is a commitment and desire to extend it to cover all types of packaging.
-
-By improving the data quality, granularity and availability of both packaging data and recycling services data and by enabling these datasets to be linked we believe we can support more sustainable packaging choices. By giving stakeholders visibility of the different parts of the chain we can help designers and manufacturers consider the end-of-life implications of their choices and we can help them determine the difference between a material being technically recyclable and the practicality of it being recycled. Providing recyclers and reprocessors with detailed data about material types and recycling disruptors we can enable more materials to be kept at a higher value for longer. Improving these datasets also helps deliver better information into the hands of consumers to support them to recycle more. Better data on market trends in packaging can also provide more certainty and unlock investment and innovation so that we can increase our recycling infrastructure and ensure more of our waste packaging ends up recycled.
-
-The standard is being developed according to the [OpenStand](https://open-stand.org/){target=_blank} principles of:
+Open 3P is based on the principles of open data, which means that it is freely accessible, sharable, and usable by anyone. It is designed to be flexible and adaptable to different contexts and use cases, so that it can evolve over time as new technologies and practices emerge. The development of Open 3P is guided by the [OpenStand](https://open-stand.org/){target=_blank} principles of:
* Due process
* Broad consensus
@@ -33,14 +21,20 @@ The standard is being developed according to the [OpenStand](https://open-stand.
* Balance
* Openness
+which ensure that the standard is developed in a fair and inclusive manner, and that all stakeholders have a voice in the process.
+
+Overall, Open 3P represents an important step forward for the packaging industry, as it provides a foundation for greater transparency and collaboration across the supply chain. By adopting a common language for sharing and exchanging data, stakeholders will be able to work together more effectively to reduce waste, improve sustainability, and create a more circular economy.
+
## What is an open data standard?
-An open data standard is a set of rules that describe the structure and components of a dataset. Putting rules in place means people and organisations that publish and share data about the same thing can use the same language to talk about it. Having a standard makes it a lot easier to understand and reuse data that has been published and shared. It is especially useful if data is being published and shared by lots of different organisations to make an even bigger dataset. Anyone can then read about the standard, contribute data, or use the data knowing everyone is talking about the same thing.
+An open data standard is a set of guidelines that dictate the structure and composition of data. It enables people and organisations to communicate data about the same topic using the same language. Standardisation of data structure ensures consistency, comparability and interconnectivity. Open data standards are publicly accessible and can be used by anyone. This makes it easy to understand, share, and reuse data that has been published and shared by others. Open data standards are especially useful when multiple organisations are publishing data about the same subject, as it allows them to collaborate and create a larger and more comprehensive dataset. By adhering to a set of open standards, data can be shared more efficiently, allowing for greater collaboration, analysis and discovery.
## How is the standard being developed?
-The initial standard development was funded by [Innovate UK](https://www.gov.uk/government/organisations/innovate-uk){target=_blank}, and is being developed through workshops with industry experts over a number of iterations.
+The initial standard development was funded by [Innovate UK](https://www.gov.uk/government/organisations/innovate-uk){target=_blank}, and is being developed through workshops with industry experts over a number of iterations. The project patners were OPRL Open Data Manchester, Dsposal, RECOUP, and Ecosurety.
## How to use the standard
-The documentation here details how to *publish* data to the standard, and how to use data that has been published to the standard. At this stage, the expectation is that data management will be supported by additional applications (such as the packaging portal that is also being developed as part of this project), and it is possible to record and publish data to the standard using the provided csv files in [Section 7](/PPP/7_Supporting_Files/7_2_Example_Files/) of this documentation.
+To use the Open 3P standard, start by familiarising yourself with the terms and definitions outlined in the standard. These are used to describe the structure and components of packaging and the packaging supply chain. Next, map your data to the standard by using the terms and definitions as a guide. This will ensure that your data is consistent and can be easily shared and understood by others who are also using the standard.
+
+It's important to note that the Open 3P standard is not a technology or platform, but rather a set of rules and guidelines for how to structure data related to packaging. It is used to help people create technology, applications, and integrations that can work together to improve transparency and sustainability in the packaging industry. By using the Open 3P standard, you can ensure that your data is accurate, consistent, and interoperable with other systems that also use the standard.
diff --git a/docs/1_Start_Here/1_2_Key_Concepts.md b/docs/1_Start_Here/1_2_Key_Concepts.md
index 91066928..cb4e7b9a 100644
--- a/docs/1_Start_Here/1_2_Key_Concepts.md
+++ b/docs/1_Start_Here/1_2_Key_Concepts.md
@@ -5,25 +5,52 @@ description: The key concepts to understanding the open data standard for the pa
# Key Concepts
-## Material Catalogue
+The Open 3P data standard is to provide information about what packaging is made out of and how these materials flow through the packaging supply chain. With Open 3P, stakeholders in the packaging supply chain will be able to share information about materials, components and packaging in a standardised format. This will allow for better collaboration between manufacturers, brands, retailers, consumers, recyclers, compliance schemes and regulators.
+``` mermaid
+sequenceDiagram
+ participant manufacturers
+ participant brands
+ participant retailers
+ participant consumers
+ participant recyclers
+ participant complianceSchemes
+ participant regulators
+ manufacturers->>brands: products
+ manufacturers->>retailers: products
+ manufacturers->>complianceSchemes: data
+ manufacturers->>regulators: data
+ brands->>retailers: products
+ brands->>consumers: products
+ brands->>recyclers: waste
+ brands->>complianceSchemes: data
+ brands->>regulators: data
+ retailers->>consumers: products
+ retailers->>recyclers: waste
+ retailers->>complianceSchemes: data
+ retailers->>regulators: data
+ consumers->>recyclers: waste
+ recyclers->>manufacturers: material
+ complianceSchemes->>regulators: data
+```
+# Definitions
+
+## Base Materials
- general template used to store information about a base level material
## Materials
- an individual substance (e.g., PET)
-- created from the material catalogue
+- created from the base materials level
## Components
- an individual unit (e.g., a bottle)
- parts made from different materials (e.g., a window on a sandwich box)
- zippers, taps, etc. (even though attached)
+- general template used for packaging manufacturers to store information.
+- these components can be used by multiple users and combined with other components in different ways
## Product
- That which is contained inside of the packaging
-## Component Catalogue
-- general template used for packaging manufacturers to store information.
-- these components can be used by multiple users and combined with other components in different ways
-
## Complete Packaging
- Components are combined to make complete packaging
- for example, a lid, a bottle and a label are all individual components. These would be combined to form a complete packaging item
@@ -37,7 +64,7 @@ description: The key concepts to understanding the open data standard for the pa
- Usually wrapped in secondary and tertiary packaging
## Load
-- Collection of load catalogue broken into destinations and on-the-market packaging for specified reporting periods.
+- Collection of load catalogue broken into destinations and on-the-market packaging for specified reporting periods
## Packaging Item
- A component, complete packaging, or multipack
diff --git a/docs/1_Start_Here/1_4_Data_Schema.md b/docs/1_Start_Here/1_4_Data_Schema.md
index 684423b7..cb19a266 100644
--- a/docs/1_Start_Here/1_4_Data_Schema.md
+++ b/docs/1_Start_Here/1_4_Data_Schema.md
@@ -6,18 +6,13 @@ description: The current data schema of the Open 3P open data standard for the p
# Data Schema
``` mermaid
erDiagram
- MATERIALS_CATALOGUE }o--o{ MATERIAL : within
- MATERIAL }o--o{ COMPONENT_CATALOGUE : within
- COMPONENT_CATALOGUE }o--o{ COMPLETE_PACKAGING : within
+ BASE_MATERIALS }o--o{ MATERIALS : within
+ MATERIALS }o--o{ COMPONENTS : within
+ COMPONENTS }o--o{ COMPLETE_PACKAGING : within
COMPLETE_PACKAGING }o..o{ MULTIPACK : within
- COMPONENT_CATALOGUE }o..o{ MULTIPACK : within
- COMPLETE_PACKAGING }o--o{ LOAD_CATALOGUE : within
+ COMPONENTS }o..o{ MULTIPACK : within
+ COMPLETE_PACKAGING }o..o{ LOAD_CATALOGUE : within
MULTIPACK }o..o{ LOAD_CATALOGUE : within
- COMPONENT_CATALOGUE }o--o{ LOAD_CATALOGUE : within
+ COMPONENTS }o..o{ LOAD_CATALOGUE : within
LOAD_CATALOGUE }o--o{ LOAD : within
```
-
-
\ No newline at end of file
diff --git a/docs/3_Data_Specification/3_1_Base_Materials.md b/docs/3_Data_Specification/3_1_Base_Materials.md
new file mode 100644
index 00000000..45ceed7f
--- /dev/null
+++ b/docs/3_Data_Specification/3_1_Base_Materials.md
@@ -0,0 +1,113 @@
+---
+title: Base Materials
+description: Base materials are the building blocks of Open 3P.
+---
+
+# Base Materials
+
+The base materials schema contains information regarding the core materials. These are then combined together within the materials table to create more complicated materials.
+
+## Table
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|baseMaterialName|`required`|String|The name of the base material this row relates to. `e.g., Polypropylene or Aluminium or Silica`|
+|baseMaterialType|`recommended`|String|Is the base material 'synthetic' or 'biobased'? Use the identifier of the material type that this row relates to. The entry here should be drawn from the [Material Type Controlled List](../5_Controlled_Lists/5_001_Material_Type.md).|
+|materialChemCID|`recommended`|String|The PubChem CID for the exact base material used. The PubChem CID is PubChem's compound identifier, which is a non-zero integer for a unique chemical structure. PubChem CID can be found using their [search](https://pubchem.ncbi.nlm.nih.gov/){target=_blank}. If for some reason the PubChem CID cannot be located, consider contributing to PubChem and create the compound identifier. However, if this cannot be done, please enter `Unknown`.|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the base material in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|certification|`recommended`|Boolean|Does the base material have a certificate (e.g. FSC, REACH, FSA etc.)?|
+|certificationClaims|`recommended`|List|The information regarding the certification. The entries should be the [Certification Claims Relationship List](../6_Relationship_Lists/6_005_Certification_Claims.md) identifiers.|
+|manufacturedCountry|`recommended`|Numeric|The country the component was manufactured in. Use the country numeric [ISO codes](https://www.iban.com/country-codes){target=_blank} as described in the ISO 3166 international standard.|
+|updateDate|`required`|String|The date that the base material was provided/last updated. Use the format `dd/mm/yyyy`.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+ BASE_MATERIALS {
+ identifier String
+ baseMaterialName String
+ baseMaterialType String
+ materialChemCID String
+ externalIdentifiers Dictionary
+ certification Boolean
+ certificationClaims List
+ manufacturedCountry Numeric
+ updateDate String
+ }
+ BASE_MATERIALS }o..o{ CONTROLLED_LISTS : attributes
+ BASE_MATERIALS }o--o{ MATERIALS : within
+ BASE_MATERIALS }o..o{ RELATIONSHIP_LISTS : attributes
+ CONTROLLED_LISTS {
+ materialType recommended }
+ RELATIONSHIP_LISTS {
+ certificationClaims recommended
+ }
+ }
+```
+
+## Template
+
+Base materials should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one base material. An example is provided.
+
+The specification of this csv file is as follows:
+
+[Base_Materials_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_1_Base_Materials_Template.csv){target=_blank}
+
+## Example
+
+=== "JSON #1"
+
+ ``` json linenums="1"
+ --FSC accredited wood grown in Spain
+ {
+ "identifier": "a5e6b8bc-ade8-4660-857e-d397243f6b57",
+ "baseMaterialName": "Spainish Softwood",
+ "baseMaterialType": "",
+ "materialChemCID": "",
+ "externalIdentifiers": {
+ "dbPK":"152314568888",
+ },
+ "certification": "TRUE",
+ "certificationClaims": ["1","35"],
+ "certificationDate": "01/08/2022",
+ "manufacturedCountry": 724,
+ "updateDate": "01/08/2022",
+ }
+ ```
+=== "JSON #2"
+
+ ``` json linenums="1"
+ --Food grade synthetic polyethylene terephthalate (PET) made in the UK - verbose data structure
+ {
+ "identifier": "A4BAE07C-1847-CD8E-C933-6FD30478423B",
+ "baseMaterialName": "PET",
+ "baseMaterialType": {
+ "identifier":"bm-material-type-0002",
+ "category":"synthetic",
+ "detailed":"derived from crude oil, natural gas or coal."
+ },
+ "materialChemCID": "223961227",
+ "externalIdentifiers": {
+ "primaryKey":"9187e576-0dfd-46dd-809e-4af0a35f888d",
+ },
+ "certification": "TRUE",
+ "certificationClaims": [{
+ "certificationIdentifier": "2e32b7cc-5fa8-425f-a2c0-784340e43f36",
+ "certificationSource": {
+ "identifier":"certification-source-0002",
+ "category":"FSA",
+ "detailed":"The Food Standards Agency (FSA) is the independent government department working to protect public health and consumers’ wider interests in relation to food in England, Wales and Northern Ireland."
+ },
+ "certificationDate": "01/08/2022",
+ }],
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022",
+ }
+ ```
+=== "CSV download"
+
+ * [Material Catalogue example download](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Example.csv){target=_blank}
\ No newline at end of file
diff --git a/docs/3_Data_Specification/3_1_Material_Catalogue.md b/docs/3_Data_Specification/3_1_Material_Catalogue.md
deleted file mode 100644
index 4b201099..00000000
--- a/docs/3_Data_Specification/3_1_Material_Catalogue.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-title: Materials Catalogue
----
-
-# Materials Catalogue
-
-The materials catalogue schema contains information regarding the base material. These are then combined together within the materials table.
-
-## Table
-|Column|
Status
|Format|Notes|
-|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
-|materialVolume|`recommended`|numeric|The amount of material used given in `ml` (See 'Guide for how to take measurements' below).|
-|materialType|`recommended`|String|Is the material 'synthetic' or 'biobased'? Use the identifier of the material type that this row relates to. The entry here should be drawn from the material type controlled list.|
-|materialPurpose|`recommended`|String|Why is this material being used? Use the identifier of the material purpose that this row relates to. The entry here should be drawn from the material purpose controlled list.|
-|materialCategory|`required`|String|The category this material row relates to. The entry here should be drawn from the material category controlled list.|
-|materialName|`required`|String|The name of the material this row relates to. `e.g., Polypropylene or Titanium Dioxide`|
-|materialChemCID|`recommended`|String|The PubChem CID for the exact material used. The PubChem CID is PubChem's compound identifier, which is a non-zero integer for a unique chemical structure. PubChem CID can be found using their [search](https://pubchem.ncbi.nlm.nih.gov/){target=_blank}. If for some reason the PubChem CID cannot be located, consider contributing to PubChem and create the compound identifier. However, if this cannot be done, please enter `Unknown`.|
-|virginMaterial|`recommended`|numeric|The maximum allowable percent of the material that was newly created for the component.|
-|updateDate|`required`|String|The date that the material was provided/last updated. Use the format `dd/mm/yyyy`.|
-
-## Diagram
-
-``` mermaid
-erDiagram
- MATERIALS_CATALOGUE {
- identifier String
- materialVolume numeric
- materialType String
- materialPurpose String
- materialCategory String
- materialName String
- materialChemCID String
- virginMaterial numeric
- updateDate String
- }
- MATERIALS_CATALOGUE }o..o{ CONTOLLED_LISTS : attritubes
- MATERIALS_CATALOGUE }o--o{ MATERIALS : within
- CONTOLLED_LISTS {
- materialType recommended
- materialPurpose recommended
- materialCategory required
- }
-```
-
-
-
-## Template
-
-Materials should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one material that is combined in the materials csv to create combinations. An example is provided.
-
-The specification of this csv file is as follows:
-
-[Material_Catalogue_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Template.csv){target=_blank}
-
-## Example
-
-=== "JSON"
-
- ``` json linenums="1"
- {
- "identifier": "A4BAE07C-1847-CD8E-C933-6FD30478423B",
- "materialVolume": "1000",
- "materialType": {
- "identifier":"material-component-catalogue-type-0002",
- "category":"synthetic",
- "detailed":"derived from crude oil, natural gas or coal."
- },
- "materialPurpose": {
- "identifier":"material-component-catalogue-purpose-0015",
- "category":"structure",
- "detailed":""
- },
- "materialCategory": {
- "identifier":"material-component-catalogue-category-0007",
- "category":"plastic",
- "detailed":""
- },
- "materialName": "PET",
- "materialChemCID": "223961227",
- "virginMaterial": "20",
- "updateDate": "01/08/2022",
- }
- ```
-=== "CSV download"
-
- * [Material Catalogue example download](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Example.csv){target=_blank}
-
-
-## Guide for how to take measurements
-
-### Units
-
-All measurements should be given using the metric system.
-
-- Volume: millilitre (ml)
-
-Numbers should be entered with a decimal place. Use the decimal / full stop / period character as a separator. Do not exceed 3 decimal places. When rounding, use convential rounding methods: for 5 and above round up, 4 and below round down. For example: volume = 0.67952 rounded to 0.68.
-
-**Important**: When converting between systems of measurement, perform the conversion first and then apply the convential rounding. This will give more accuracy and consistency.
-
diff --git a/docs/3_Data_Specification/3_2_Material.md b/docs/3_Data_Specification/3_2_Material.md
deleted file mode 100644
index 1734083c..00000000
--- a/docs/3_Data_Specification/3_2_Material.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: Materials
----
-
-# Materials
-
-The materials schema contains information regarding the materials that are used within components. These maybe a single base material from the materials catalogue and a combination of materials.
-
-## Table
-|Column|
Status
|Format|Notes|
-|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
-|materialIdentifier|`required`|String|The unique identifier of the created materials. See identifiers section for information on how to construct this identifier.|
-|materialCatalogue|`required`|String|The unique identifier of the material that this row relates to. There must be an equivalent record in the `material_Catalogue` data|
-|layer|`recommended`|integer|The layer associated with the component. The inner most layer (the layer closest to the product) denoted as 1, and the outermost layer is the biggest number.|
-|materialWeight|`recommended`|numeric|The percentage of the total materials making-up the component. For every unique componentCatalogue, weightMaterial should add to 100%.|
-|combinationPurpose|`recommended`|String|Why is this material being used? Use the identifier of the material function that this row relates to. The entry here should be drawn from the material function controlled list.|
-|updateDate|`required`|String|The date that the material was provided/last updated. Use the format `dd/mm/yyyy`.|
-
-## Diagram
-
-``` mermaid
-erDiagram
-MATERIALS_CATALOGUE }o--o{ MATERIALS : within
- MATERIALS {
- identifier String
- materialIdentifier numeric
- materialCatalogue String
- layer String
- materialWeight String
- combinationPurpose String
- updateDate String
- }
- MATERIALS }o..o{ CONTOLLED_LISTS : attritubes
- MATERIALS }o--o{ COMPONENT_CATALOGUE : within
- CONTOLLED_LISTS {
- materialFunction recommended
- }
-```
-
-
-
-## Template
-Materials should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one material for a component. An example is provided.
-
-The specification of this csv file is as follows:
-
-[Materials_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Template.csv){target=_blank}
-
-## Example
-
-=== "JSON"
-
- ``` json linenums="1"
- {
- "identifier": "DCEE1F88-A83B-5BBC-D2D9-6A862B344977",
- "materialIdentifier": "278EFE8A-720A-06C1-A411-CB94878AD3E2",
- "materialCatalogue": "A4BAE07C-1847-CD8E-C933-6FD30478423B",
- "layer": "1",
- "materialWeight": "100",
- "combinationPurpose": {
- "identifier":"material-component-catalogue-purpose-0015",
- "category":"structure",
- },
- "updateDate": "01/08/2022",
- }
- ```
-=== "CSV download"
-
- * [Materials example download](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Example.csv){target=_blank}
-
-## Guide for how to take measurements
-
-### Units
-
-All measurements should be given using the metric system.
-
-- Weight: grams (g)
-
-Numbers should be entered with a decimal place. Use the decimal / full stop / period character as a separator. Do not exceed 3 decimal places. When rounding, use convential rounding methods: for 5 and above round up, 4 and below round down. For example: volume = 0.67952 rounded to 0.68.
-
-**Important**: When converting between systems of measurement, perform the conversion first and then apply the convential rounding. This will give more accuracy and consistency.
diff --git a/docs/3_Data_Specification/3_2_Materials.md b/docs/3_Data_Specification/3_2_Materials.md
new file mode 100644
index 00000000..331dd753
--- /dev/null
+++ b/docs/3_Data_Specification/3_2_Materials.md
@@ -0,0 +1,279 @@
+---
+title: Materials
+description: Materials are a combination of base materials within Open 3P.
+---
+
+# Materials
+
+The materials schema contains information regarding the materials that are used within components. These maybe a single material from the base materials catalogue, a combination of base materials and/or a material from the materials schema itself.
+
+## Table
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|identifier|`required`|String|The globally unique identifier for the created material unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|materialName|`required`|String|The name of the material this row relates to. (e.g., Aluminium 3000 Series or Borosilicate glass)|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the material in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|materialConstituents|`required`|List|The information regarding the consituents that are combined to create this material. The entries should be from the [Material Constituents Relationship List](../6_Relationship_Lists/6_001_Material_Constituents.md) identifier.|
+|combinationPurpose|`recommended`|String|Why is this material being used? Use the identifier of the function that this row relates to. The entry here should be drawn from the [Function Controlled List](../5_Controlled_Lists/5_004_Function.md).|
+|certification|`recommended`|Boolean|Does the material have a certificate (e.g. FSC, REACH, FSA etc.)?|
+|certificationClaims|`recommended`|List|The information regarding the certification. The entries should be the [Certification Claims Relationship List](../6_Relationship_Lists/6_005_Certification_Claims.md) identifiers.|
+|manufacturedCountry|`recommended`|Numeric|The country the component was manufactured in. Use the country numeric [ISO codes](https://www.iban.com/country-codes){target=_blank} as described in the ISO 3166 international standard.|
+|updateDate|`required`|String|The date that the material was provided/last updated. Use the format `dd/mm/yyyy`.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+BASE_MATERIALS }o--o{ MATERIALS : within
+ MATERIALS {
+ identifier String
+ materialName String
+ externalIdentifiers Dictionary
+ materialConstituents List
+ combinationPurpose String
+ certification Boolean
+ certificationClaims List
+ manufacturedCountry Numeric
+ updateDate String
+ }
+ MATERIALS }o..o{ CONTROLLED_LISTS : attributes
+ MATERIALS }o--o{ COMPONENTS : within
+ MATERIALS }o..o{ RELATIONSHIP_LISTS : attributes
+ CONTROLLED_LISTS {
+ function recommended
+ }
+ RELATIONSHIP_LISTS {
+ materialConstituents required
+ certificationClaims recommended
+ }
+```
+
+## Template
+Materials should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one material for a component. An example is provided.
+
+The specification of this csv file is as follows:
+
+[Materials_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_2_Materials_Template.csv){target=_blank}
+
+## Example
+
+=== "JSON #1"
+
+ ``` json linenums="1"
+ --Food grade synthetic polyethylene terephthalate (PET) made in the UK. Only one base material.
+ {
+ "identifier": "DCEE1F88-A83B-5BBC-D2D9-6A862B344977",
+ "materialName":"PET",
+ "externalIdentifiers": {
+ "GTIN":"123456789101",
+ },
+ "materialConstituents":["DCEE1F88-A83B-5BBC-D2D9-6A862B344977"],
+ "combinationPurpose": "",
+ "certification": "TRUE",
+ "certificationClaims": ["1"],
+ "manufacturedCountry": 826,
+ "updateDate": "01/08/2022",
+ }
+ ```
+=== "JSON #2"
+
+ ``` json linenums="1"
+ --Fibre based composite material to be used for a carton - semi verbose
+ {
+ "identifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialName": "Classic Carton Board - EVOH",
+ "externalIdentifiers": {
+ "EAN": "0123456789101",
+ "BatchNumber": "2145-23-po"
+ },
+ "materialConstituents": [
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": {
+ "identifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "baseMaterialName": "Polyethylene",
+ "baseMaterialType": {
+ "identifier":"bm-material-type-0002",
+ "category":"synthetic",
+ "detailed":"derived from crude oil, natural gas or coal."
+ },
+ "materialChemCID": null,
+ "externalIdentifiers": {
+ "pk":"12",
+ },
+ "certification": "FALSE",
+ "certificationClaims": null,
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022",
+ },
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0005",
+ "category": "barrier",
+ "detailed": "Used to reduce water and gas diffusion into and/or out of the material."
+ },
+ "virginMaterial": 100,
+ "layer": 1,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "96245c85-5671-4f3d-875f-82665005e9e8",
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0015",
+ "category": "structure",
+ "detailed": "Providing strength and stability."
+ },
+ "virginMaterial": 100,
+ "layer": 2,
+ "materialPercentage": 27
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": {
+ "identifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "baseMaterialName": "Polyethylene",
+ "baseMaterialType": {
+ "identifier":"bm-material-type-0002",
+ "category":"synthetic",
+ "detailed":"derived from crude oil, natural gas or coal."
+ },
+ "materialChemCID": null,
+ "externalIdentifiers": {
+ "pk":"12",
+ },
+ "certification": "FALSE",
+ "certificationClaims": null,
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022",
+ },
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0002",
+ "category": "adhesive",
+ "detailed": "Applied to one or both surfaces of two separate items that binds them together and resists their separation."
+ },
+ "virginMaterial": 100,
+ "layer": 3,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "ff249e1f-5015-46b8-8655-6c920fbf2606",
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0003",
+ "category": "antioxidant",
+ "detailed": "Used to inhibit oxidation."
+ },
+ "virginMaterial": 100,
+ "layer": 4,
+ "materialPercentage": 18
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": {
+ "identifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "baseMaterialName": "Polyethylene",
+ "baseMaterialType": {
+ "identifier":"bm-material-type-0002",
+ "category":"synthetic",
+ "detailed":"derived from crude oil, natural gas or coal."
+ },
+ "materialChemCID": null,
+ "externalIdentifiers": {
+ "pk":"12",
+ },
+ "certification": "FALSE",
+ "certificationClaims": null,
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022",
+ },
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0002",
+ "category": "adhesive",
+ "detailed": "Applied to one or both surfaces of two separate items that binds them together and resists their separation."
+ },
+ "virginMaterial": 100,
+ "layer": 5,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "96245c85-5671-4f3d-875f-82665005e9e8",
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0015",
+ "category": "structure",
+ "detailed": "Providing strength and stability."
+ },
+ "virginMaterial": 100,
+ "layer": 6,
+ "materialPercentage": 27
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": {
+ "identifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "baseMaterialName": "Polyethylene",
+ "baseMaterialType": {
+ "identifier":"bm-material-type-0002",
+ "category":"synthetic",
+ "detailed":"derived from crude oil, natural gas or coal."
+ },
+ "materialChemCID": null,
+ "externalIdentifiers": {
+ "pk":"12",
+ },
+ "certification": "FALSE",
+ "certificationClaims": null,
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022",
+ },
+ "materialPurpose": {
+ "identifier": "m-material-purpose-0005",
+ "category": "barrier",
+ "detailed": "Used to reduce water and gas diffusion into and/or out of the material."
+ },
+ "virginMaterial": 100,
+ "layer": 7,
+ "materialPercentage": 7
+ },
+ ],
+ "combinationPurpose": {
+ "identifier": "function-0012",
+ "category": "carton",
+ "detailed": "Box or container used for transporting and storaging goods."
+ },
+ "certification": "FALSE",
+ "certificationClaims": null,
+ "manufacturedCountry": {
+ "Country": "United Kingdom of Great Britain and Northern Ireland (the)",
+ "Numeric": 826
+ },
+ "updateDate": "01/08/2022"
+ }
+ ```
+=== "CSV download"
+
+ * [Materials example download](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Example.csv){target=_blank}
+
+## Guide for how to take measurements
+
+### Units
+
+All measurements should be given using the metric system.
+
+- Weight: grams (g)
+
+Numbers should be entered with a decimal place. Use the decimal / full stop / period character as a separator. Do not exceed 3 decimal places. When rounding, use convential rounding methods: for 5 and above round up, 4 and below round down. For example: volume = 0.67952 rounded to 0.68.
+
+**Important**: When converting between systems of measurement, perform the conversion first and then apply the convential rounding. This will give more accuracy and consistency.
diff --git a/docs/3_Data_Specification/3_3_Component_Catalogue.md b/docs/3_Data_Specification/3_3_Components.md
similarity index 72%
rename from docs/3_Data_Specification/3_3_Component_Catalogue.md
rename to docs/3_Data_Specification/3_3_Components.md
index 67790358..50690513 100644
--- a/docs/3_Data_Specification/3_3_Component_Catalogue.md
+++ b/docs/3_Data_Specification/3_3_Components.md
@@ -1,21 +1,22 @@
---
-title: Component Catalogue
+title: Components
+description: Components are the individaul items of packaging made from materials in Open 3P.
---
-# Component Catalogue
+# Components
-The component catalogue schema contains information regarding the components that are used to create complete packages. These maybe created from a single material or a combination of materials from the materials schema.
+The components schema contains information regarding the individual components that are used to create complete packages. These maybe created from a single material or a combination of materials from the materials schema.
## Table
|Column|
Status
|Format|Notes|
|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
|name|`recommended`|String|The name of this component.|
|description|`recommended`|String|A brief description of this component.|
-|tags|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the component in other systems. For example: bar codes or global trade item number (gtin). To provide tags please follow this format. `{'tagName1': 'identifier1', 'tagName2': 'identifier2'}`|
-|imageURL|`recommended`|URL|A URL that links to a picture of the component. Please see the guidelines below on how to capture the image and name the URL.|
-|LOWcode|`recommended`|String|The list of waste code for **only** the component, by itself. LOW code is synonymous with European Waste Catelogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc){target=_blank} or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made){target=_blank} to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the completePackaging. Be sure to only include the component LOWcode. If you cannot find the code or are uncertain please enter `Uncertain`.|
-|materialIdentifier|`required`|String|The unique identifier of the materials that this component is made of. There must be an equivalent record in the `materials` data.|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the component in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|imageURLs|`recommended`|List|A list of URLs that links to a picture of the component. Please see the guidelines below on how to capture the image and name the URL.|
+|LOWcode|`recommended`|String|The list of waste code for **only** the component, by itself. LOW code is synonymous with European Waste Catalogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc) or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made) to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the completePackaging. Be sure to only include the component LOWcode. If you cannot find the code or are uncertain please enter `Uncertain`.|
+|componentConstituents|`required`|List|The information regarding the consituents that are combined to create this component. The entries should be from the [Material Constituents Relationship List](../6_Relationship_Lists/6_002_Component_Constituents.md) identifier.|
|height|`recommended`|Numeric|The height of the component. Please see the guidelines below on how to properly measure and report the height.|
|heightDate|`recommended`|String|The date that the height was last verified/measured. Use the format `dd/mm/yyyy`.|
|width|`recommended`|Numeric|The width of the component. Please see the guidelines below on how to properly measure and report the width.|
@@ -26,26 +27,25 @@ The component catalogue schema contains information regarding the components tha
|volumeDate|`recommended`|String|The date that the volume was last verified/measured. Use the format `dd/mm/yyyy`.|
|weight|`required`|Numeric|The weight of the component.|
|weightTolerance|`required`|Numeric|The threshold of weight that components can vary by. This is given as +/- x%.|
+|weightToleranceType|`required`|String|Either `grams` or `percentage` based on the value provided in `weightTolerance`|
|weightDate|`recommended`|String|The date that the weight was last verified/measured. Use the format `dd/mm/yyyy`.|
-|shape|`recommended`|String|What is the shape of the component? The entry should contain the shape controlled list identifier for the component.|
-|function|`recommended`|String|What is the function of the component? The entry should contain the function controlled list identifier for the component.|
-|flexibility|`recommended`|String|Whether the component is considered flexible or rigid. The entry should be the flexibility controlled list identifier.|
+|shape|`recommended`|String|What is the shape of the component? The entry should contain the [shape controlled list](../5_Controlled_Lists/5_006_Shape.md) identifier for the component.|
+|function|`recommended`|String|What is the function of the component? The entry should contain the [function controlled list](../5_Controlled_Lists/5_004_Function.md) identifier for the component.|
+|flexibility|`recommended`|String|Whether the component is considered flexible or rigid. The entry should be the [flexibility controlled list](../5_Controlled_Lists/5_007_Flexibility.md) identifier.|
|branding|`required`|Boolean|Does the component contain your own brand (logo, trademark, or any distinctive mark)?|
-|componentRecyclingDisruptors|`recommended`|String|What challenges the component has for recycling. The entry should be the componentRecyclingDisruptors controlled list identifier.|
-|colour|`recommended`|String|The actual colour of the component at point of production using CMYK (Cyan-Magenta-Yellow-blacK) values. The format is specified according to cmyk(C%, M%, Y%, K%), where C, M, Y, and K are the percent values for the cyan, magenta, yellow, and black values of the color. For example: black is `cmyk(0%,0%,0%,100%)`. |
-|opacity|`recommended`|String|The transparency of the colours. The entry should be the opacity controlled list identifier.|
+|componentEndOfLifeRoutes|`recommended`|List|The information regarding this component's proposed end of life routes. The entries should be the [component end of life routes](../6_Relationship_Lists/6_007_Component_End_of_Life_Routes.md) identifiers.|
+|colour|`recommended`|String|The actual colour of the component at point of production using CMYK (Cyan-Magenta-Yellow-blacK) values. The format is specified according to cmyk(C%, M%, Y%, K%), where C, M, Y, and K are the percent values for the cyan, magenta, yellow, and black values of the color. For example: black is `cmyk(0%,0%,0%,100%)`. If there are multiple colours input `decorative`.|
+|opacity|`recommended`|String|The transparency of the colours. The entry should be the [opacity controlled list](../5_Controlled_Lists/5_009_Opacity.md) identifier.|
|loaned|`required`|Boolean|Is the component hired or loaned out as reusable packaging?|
-|reuseSystem|`recommended`|String|The system that facilitates the reuse of the component `e.g., Loop`|
-|manufacturedCountry|`required`|Numeric|The country the component was manufactured in. Use the country numeric [ISO codes](https://www.iban.com/country-codes){target=_blank} as described in the ISO 3166 international standard.|
+|reuseSystems|`recommended`|List|The system(s) that facilitates the reuse of the component `e.g., Loop`. The entries should be the [reuse system controlled list](../5_Controlled_Lists/5_010_Reuse_System.md) identifier(s).|
+|partOfMultipack|`required`|Boolean|Is the component part of a multipack? Answer as: TRUE for yes and FALSE for no.|
|recycledContent|`required`|Numeric|The minimum allowable percent of how much recycled content is included in the makeup of the component. For the purposes of this standard, we refer to the [UK's HM Revenue & Customs](https://www.gov.uk/guidance/work-out-which-packaging-is-subject-to-plastic-packaging-tax){target=_blank} definition of recycled content. "Recycled plastic is plastic that has been reprocessed from recovered material by using a chemical or manufacturing process. This is so it can be used either for its original purpose or for other purposes. This does not include organic recycling. Recovered material is pre-consumer plastic or post-consumer plastic that both: a) is no longer suitable to be used in the process from which it was generated and would otherwise have been used for energy recovery (for example, by incineration) or disposed of as waste (for example, by being sent to landfill); b) has been collected and recovered for use as a material input for a recycling or manufacturing process, instead of new primary material"|
-|recycledContentEvidenceType|`required`|String|What evidence type supports the recycledContent claim. The entry should be the recycledContentEvidenceType controlled list identifier.|
-|recycledContentEvidenceReference|`required`|String|An accompanying reference number associated with the recycledContentEvidenceType for the component.|
+|recycledContentClaims|`required`|List|The information regarding the recycled contents. The entries should be the [recycled content claims relationship list](../6_Relationship_Lists/6_009_Recycled_Content_Claims.md) indentifiers.|
|recyclability|`recommended`|Boolean|Is the component recyclable (as determined by a reputable source)?|
-|recyclabilitySource|`recommended`|String|What source provided the recyclability claim? The entry should be the recyclabilitySource controlled list identifier.|
-|recyclabilityDate|`recommended`|String|The date that the recyclability was provided/last updated. Use the format `dd/mm/yyyy`.|
-|partOfMultipack|`required`|Boolean|Is the component part of a multipack? Answer as: `1` for yes and `0` for no.|
-|previouslyAssembledComponent|`required`|Boolean|When manufactured, was this component combined with other components? Answer as: `1` for yes and `0` for no.|
-|componentLink|`required`|String|If `previouslyAssembledComponent` is yes, please provide the `identifier` for the component that is attached when created. Answer `NA` if `previouslyAssembledComponent` is no.|
+|recyclabilityClaims|`recommended`|List|The information regarding this recyclability claims. The entries should be the [recyclability claims relationship list](../6_Relationship_Lists/6_006_Recyclability_Claims.md) identifiers.|
+|certification|`recommended`|Boolean|Does the component have a certificate (e.g. FSC, REACH, FSA etc.)?|
+|certificationClaims|`recommended`|List|The information regarding the certifications. The entries should be the [certification claims relationship list](../6_Relationship_Lists/6_005_Certification_Claims.md) identifiers.|
+|manufacturedCountry|`recommended`|Numeric|The country the component was manufactured in. Use the country numeric [ISO codes](https://www.iban.com/country-codes){target=_blank} as described in the ISO 3166 international standard.|
|updateDate|`required`|String|The date that the component was provided/last updated. Use the format `dd/mm/yyyy`.|
|releaseDate|`recommended`|String|The date that the component will be available to use. Use the format `dd/mm/yyyy`.|
|discontinueDate|`recommended`|String|The date that the component will no longer be available to use. Use the format `dd/mm/yyyy`.|
@@ -54,14 +54,15 @@ The component catalogue schema contains information regarding the components tha
``` mermaid
erDiagram
-MATERIALS }o--o{ COMPONENT_CATALOGUE : within
- COMPONENT_CATALOGUE {
+MATERIALS }o--o{ COMPONENTS : within
+ COMPONENTS {
identifier String
- name numeric
+ name String
description String
- tags Dictionary
- imageURL URL
+ externalIdentifiers Dictionary
+ imageURLs List
LOWcode String
+ componentConstituents List
height Numeric
heightDate String
width Numeric
@@ -77,67 +78,66 @@ MATERIALS }o--o{ COMPONENT_CATALOGUE : within
function String
flexibility String
branding Boolean
- componentRecyclingDisruptors String
+ componentEndOfLifeRoutes List
colour String
opacity String
loaned Boolean
- reuseSystem String
+ reuseSystems String
manufacturedCountry Numeric
recycledContent Numeric
- recycledContentEvidenceType String
- recycledContentEvidenceReference String
+ recycledContentClaims List
recyclability Boolean
- recyclabilitySource String
- recyclabilityDate String
+ recyclabilityClaims List
partOfMultipack Boolean
- previouslyAssembledComponent Boolean
- componentLink String
+ certification Boolean
+ certificationClaims List
updateDate String
releaseDate String
discontinueDate String
}
- COMPONENT_CATALOGUE }o..o{ CONTOLLED_LISTS : attritubes
- COMPONENT_CATALOGUE }o--o{ COMPLETE_PACKAGING : within
- COMPONENT_CATALOGUE }o..o{ MULTIPACK : within
+ COMPONENTS }o..o{ CONTROLLED_LISTS : attributes
+ COMPONENTS }o..o{ RELATIONSHIP_LISTS : attributes
+ COMPONENTS }o--o{ COMPLETE_PACKAGING : within
+ COMPONENTS }o..o{ MULTIPACK : within
MULTIPACK }o..o{ LOAD_CATALOGUE : within
COMPLETE_PACKAGING }o..o{ MULTIPACK : within
COMPLETE_PACKAGING }o..o{ LOAD_CATALOGUE : within
- COMPONENT_CATALOGUE }o..o{ LOAD_CATALOGUE : within
- CONTOLLED_LISTS {
- recyclabilitySource recommended
+ COMPONENTS }o..o{ LOAD_CATALOGUE : within
+ CONTROLLED_LISTS {
shape recommended
function recommended
flexibility recommended
- componentRecyclingDisruptors recommended
opacity recommended
- recycledContentEvidenceType required
+ reuseSystem recommended
+ }
+ RELATIONSHIP_LISTS {
+ componentConstituents required
+ componentEndOfLifeRoutes recommended
+ recycledContentClaims required
+ recyclabilityClaims recommended
+ certificationClaims recommended
}
```
-
-
Components should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one component of a complete package. An example is provided.
The specification of this csv file is as follows:
-[Component_Catalogue_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_1_Component_Catalogue_Template.csv){target=_blank}
+[Components_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_3_Components_Template.csv){target=_blank}
## Example
=== "JSON"
``` json linenums="1"
+ --Food grade PET circular pot made in the UK
{
"identifier": "278EFE8A-720A-06C1-A411-CB94878AD3E2",
"name": "Guacamole Dip Pot",
"description": "Clear PET pot for the Guacamole Dip",
- "tags": {
- "GTIN":"00123456789012",
+ "externalIdentifiers": {
+ "internalId": "GUA-PET-2022-1",
+ "GTIN": "00123456789012",
},
"imageURL": "",
"LOWcode": "15 01 02",
@@ -154,17 +154,17 @@ The specification of this csv file is as follows:
"weightTolerance": "4.38%",
"weightDate": "01/08/2022",
"shape": {
- "identifier":"component-catalogue-shape-0005",
+ "identifier":"c-shape-0005",
"category":"cylinder",
"detailed":"3D shape with 2 parallel circular bases connected by a curved surface"
},
"function": {
- "identifier":"component-catalogue-function-0030",
+ "identifier":"function-0030",
"category":"pot",
"detailed":""
},
"flexibility": {
- "identifier": "component-catalogue-flexibility-0002",
+ "identifier": "c-flexibility-0001",
"category": "Rigid",
"detailed": ""
},
@@ -172,33 +172,38 @@ The specification of this csv file is as follows:
"componentRecyclingDisruptors": "",
"colour": "",
"opacity": {
- "identifier": "component-catalogue-opacity-0003",
+ "identifier": "c-opacity-0003",
"category": "transparent",
"detailed": "allows light to pass through so that objects behind can be distinctly seen; no colour/ clear"
},
"loaned": "FALSE",
- "reuseSystem": "",
+ "reuseSystems": "",
"manufacturedCountry": {
"Country": "United Kingdom of Great Britain and Northern Ireland (the)",
"Numeric": 826
},
"recycledContent": 90,
"recycledContentEvidenceType": {
- "identifier":"component-catalogue-recycled-evidence-0001",
+ "identifier":"c-recycled-evidence-0001",
"category":"certificate",
"detailed":""
},
"recycledContentEvidenceReference": "EXA-123-MPL-4-E",
"recyclability": "TRUE",
"recyclabilitySource": {
- "identifier":"complete-packaging-recyclability-source-0001",
+ "identifier":"recyclability-source-0001",
"category":"OPRL",
- "detailed":""
+ "detailed":"OPRL is a not-for-profit company limited by guarantee, any surpluses being reinvested in our activities to promote recycling of packaging."
},
"recyclabilityDate": "01/08/2022",
"partOfMultipack": "TRUE",
- "previouslyAssembledComponent": "FALSE",
- "componentLink": "NA",
+ "certification": "TRUE",
+ "certificationSource": {
+ "identifier": "certification-source-0002",
+ "category": "FSA",
+ "detailed": "The Food Standards Agency (FSA) is the independent government department working to protect public health and consumers’ wider interests in relation to food in England, Wales and Northern Ireland."
+ },
+ "certificationDate": "01/08/2022",
"updateDate": "01/08/2022",
"releaseDate": "01/08/2022",
"discontinueDate": ""
diff --git a/docs/3_Data_Specification/3_4_Complete_Packaging.md b/docs/3_Data_Specification/3_4_Complete_Packaging.md
index 60ce7aea..e934c0dc 100644
--- a/docs/3_Data_Specification/3_4_Complete_Packaging.md
+++ b/docs/3_Data_Specification/3_4_Complete_Packaging.md
@@ -1,5 +1,6 @@
---
title: Complete Packaging
+description: Complete packaging items are the finished packaging within Open 3P.
---
# Complete Packaging
@@ -9,23 +10,22 @@ The complete packaging schema contains information regarding the complete packag
## Table
|Column|
Status
|Format|Notes|
|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
|name|`recommended`|String|The name of this complete packaging.|
|description|`recommended`|String|A brief description of this complete packaging.|
-|tags|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the complete packaging in other systems. For example: bar codes or global trade item number (gtin). To provide tags please follow this format. `{'tagName1': 'identifier1', 'tagName2': 'identifier2'}`|
-|imageURL|`recommended`|URL|A URL that links to a picture of the complete packaging. Please see the guidelines below on how to capture the image and name the URL.|
-|componentItems|`required`|String|The component catalogue identifiers used to create the complete packaging. There must be an equivalent record in the `component_catalogue` data.|
-|LOWcodeWOproduct|`recommended`|String|The list of waste code for **only** the complete packaging, by itself (excluding the product). LOW code is synonymous with European Waste Catelogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc){target=_blank} or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made){target=_blank} to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the complete packaging. Be sure to only include the complete packaging LOWcode and not the complete packaging with the product. If you cannot find the code or are uncertain please enter `Uncertain`.|
-|productType|`recommended`|String|Information about the product contained in the complete packaging. The entry here should be drawn from the product type controlled list.|
-|componentContactWithProduct|`required`|String|What components (if any) come into direct contact with the product before purchased by a consumer? If none of the components come into contact with the product use `NA`. If there are multiple components, separate with a comma. `e.g. 'component1', 'component2'`|
-|LOWcodeWproduct|`recommended`|String|The list of waste code for **everything** in the complete packaging. LOW code is synonymous with European Waste Catelogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc){target=_blank} or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made){target=_blank} to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the complete packaging. Be sure to include the complete packaging LOWcode with the product. If you cannot find the code or are uncertain please enter `Uncertain`.|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the complete packaging in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|imageURLs|`recommended`|List|URL(s) that links to a picture of the complete packaging. Please see the guidelines below on how to capture the image and name the URL.|
+|completePackagingConstituentsIdentifier|`required`|List|The information regarding the consituents that are combined to create this complete packaging. The entries should be from the [Complete Packaging Constituents Relationship List](../6_Relationship_Lists/6_003_Complete_Packaging_Constituents.md) identifier.|
+|LOWcodeWOproduct|`recommended`|String|The list of waste code for **only** the complete packaging, by itself (excluding the product). LOW code is synonymous with European Waste Catalogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc){target=_blank} or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made){target=_blank} to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the complete packaging. Be sure to only include the complete packaging LOWcode and not the complete packaging with the product. If you cannot find the code or are uncertain please enter `Uncertain`.|
+|productType|`recommended`|String|Information about the product contained in the complete packaging. The entry here should be drawn from the [product type controlled list](../5_Controlled_Lists/5_012_Product_Type.md).|
+|componentContactWithProduct|`required`|List|What components (if any) come into direct contact with the product before purchased by a consumer? If none of the components come into contact with the product use `NA`.|
+|LOWcodeWproduct|`recommended`|String|The list of waste code for **everything** in the complete packaging. LOW code is synonymous with European Waste Catalogue Code (EWC). For example: an empty bottle would have a LOWcode of `15 01 02`. Please use [Dsposal](https://dsposal.uk/browse/ewc){target=_blank} or [legislation.gov](https://www.legislation.gov.uk/uksi/2005/895/schedule/1/made){target=_blank} to find the LOWcode. **Note**: The LOWcode can based on its combination with other components and the actual product contained in the complete packaging. Be sure to include the complete packaging LOWcode with the product. If you cannot find the code or are uncertain please enter `Uncertain`.|
|onTheGo|`required`|Boolean|Is the complete packaging often classed as packaging that will end up in street bins?|
|householdWaste|`required`|Boolean|Is the complete packaging often classed as packaging that will end up in kerbside collections?|
-|depositReturnScheme|`required`|String| Which countries in the United Kingdom support a [deposit return scheme](https://www.gov.uk/government/consultations/introduction-of-a-deposit-return-scheme-in-england-wales-and-northern-ireland){target=_blank} for this particular complete packaging? The entry here should be drawn from the deposit return scheme controlled list.|
-|recyclingDisruptors|`recommended`|String|What challenges the complete packaging has for recycling. The entry should be the recycling disruptors controlled list identifier.|
+|depositReturnSchemes|`required`|List|Which countries support a deposit return scheme for this particular complete packaging? The entries here should be drawn from the [deposit return scheme controlled list](../5_Controlled_Lists/5_013_Deposit_Return_Scheme.md).|
+|completePackagingEndOfLifeRoutes|`recommended`|List|The information regarding this complete packaging's proposed end of life routes. The entries should be the [complete packaging end of life routes](../6_Relationship_Lists/6_008_Complete_Packaging_End_of_Life_Routes.md) identifiers.|
|recyclability|`recommended`|Boolean|Is the complete packaging recyclable (as determined by a reputable source)?|
-|recyclabilitySource|`recommended`|String|What source provided the recyclability claim? The entry should be the recyclabilitySource controlled list identifier.|
-|recyclabilityDate|`recommended`|String|The date that the recyclability was provided/last updated. Use the format `dd/mm/yyyy`.|
+|recyclabilityClaims|`recommended`|List|The information regarding this recyclability claims. The entries should be the [recyclability claims relationship list](../6_Relationship_Lists/6_006_Recyclability_Claims.md) identifiers.|
|height|`recommended`|Numeric|The height of the complete packaging. Please see the guidelines below on how to properly measure and report the height.|
|heightDate|`recommended`|String|The date that the height was last verified/measured. Use the format `dd/mm/yyyy`.|
|width|`recommended`|Numeric|The width of the complete packaging. Please see the guidelines below on how to properly measure and report the width.|
@@ -35,11 +35,14 @@ The complete packaging schema contains information regarding the complete packag
|volume|`recommended`|Numeric|Using the height, width, and depth found using the measurement guidelines, calculate the complete packaging's volume using: `height x width x depth`.|
|volumeDate|`recommended`|String|The date that the volume was last verified/measured. Use the format `dd/mm/yyyy`.|
|weight|`required`|Numeric|The weight of the complete packaging.|
-|weightTolerance|`required`|Numeric|The threshold of weight that complete packaging can vary by. This should be given in grams.|
+|weightTolerance|`required`|Numeric|The threshold of weight that complete packaging can vary by. This can be given in grams or percentage.|
+|weightToleranceType|`required`|String|Either `grams` or `percentage` based on the value provided in `weightTolerance`|
|weightDate|`recommended`|String|The date that the weight was last verified/measured. Use the format `dd/mm/yyyy`.|
|servingCapacity|`recommended`|Numeric|The serving capacity of the complete packaging - how much of a product that can be contained in the complete packaging.|
|servingCapacityDate|`recommended`|String|The date that the serving capacity was last verified/measured. Use the format `dd/mm/yyyy`.|
|partOfMultipack|`required`|Boolean|Is the complete packaging part of a multipack? Answer as: `1` for yes and `0` for no.|
+|certification|`recommended`|Boolean|Does the complete packaging have a certificate (e.g. FSC, REACH, FSA etc.)?|
+|certificationClaims|`recommended`|List|The information regarding the certifications. The entries should be the [certification claims relationship list](../6_Relationship_Lists/6_005_Certification_Claims.md) identifiers.|
|updateDate|`required`|String|The date that the complete packaging was provided/last updated. Use the format `dd/mm/yyyy`.|
|releaseDate|`recommended`|String|The date that the complete packaging will be available to use. Use the format `dd/mm/yyyy`.|
|discontinueDate|`recommended`|String|The date that the complete packaging will no longer be available to use. Use the format `dd/mm/yyyy`.|
@@ -48,25 +51,24 @@ The complete packaging schema contains information regarding the complete packag
``` mermaid
erDiagram
-COMPONENT_CATALOGUE }o--o{ COMPLETE_PACKAGING : within
+COMPONENTS }o--o{ COMPLETE_PACKAGING : within
COMPLETE_PACKAGING {
identifier String
name String
description String
- tags Dictionary
- imageURL URL
- componentItems String
+ externalIdentifiers Dictionary
+ imageURLs List
+ completePackagingConstituentsIdentifier List
LOWcodeWOproduct String
productType String
- componentContactWithProduct String
+ componentContactWithProduct List
LOWcodeWproduct String
onTheGo Boolean
householdWaste Boolean
- depositReturnScheme String
- recyclingDisruptors String
+ depositReturnSchemes List
+ completePackagingEndOfLifeRoutes List
recyclability Boolean
- recyclabilitySource String
- recyclabilityDate String
+ recyclabilityClaims List
height Numeric
heightDate String
width Numeric
@@ -77,40 +79,43 @@ COMPONENT_CATALOGUE }o--o{ COMPLETE_PACKAGING : within
volumeDate String
weight Numeric
weightTolerance Numeric
+ weightToleranceType String
weightDate String
servingCapacity Numeric
servingCapacityDate String
partOfMultipack Boolean
+ certification Boolean
+ certificationClaims List
updateDate String
releaseDate String
discontinueDate String
}
- COMPLETE_PACKAGING }o..o{ CONTOLLED_LISTS : attritubes
+ COMPLETE_PACKAGING }o..o{ CONTROLLED_LISTS : attributes
+ COMPLETE_PACKAGING }O..O{ RELATIONSHIP_LISTS : attributes
COMPLETE_PACKAGING }o..o{ MULTIPACK : within
- COMPONENT_CATALOGUE }o..o{ MULTIPACK : within
+ COMPONENTS }o..o{ MULTIPACK : within
COMPLETE_PACKAGING }o..o{ LOAD_CATALOGUE : within
MULTIPACK }o..o{ LOAD_CATALOGUE : within
- COMPONENT_CATALOGUE }o..o{ LOAD_CATALOGUE : within
- CONTOLLED_LISTS {
- productType recommended
- depositReturnScheme recommended
- recyclingDisruptors recommended
- recyclabilitySource recommended
- }
+ COMPONENTS }o..o{ LOAD_CATALOGUE : within
+ CONTROLLED_LISTS {
+ productType recommended
+ depositReturnScheme recommended
+ }
+ RELATIONSHIP_LISTS {
+ completePackagingEndOfLifeRoutes required
+ completePackagingConstituentsIdentifier required
+ recyclabilityClaims recommended
+ certificationClaims recommended
+ }
```
-
-
## Template
Complete packaging should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one complete package of a load. An example is provided.
The specification of this csv file is as follows:
-[Complete_Packaging_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_3_Complete_Packaging_Template.csv){target=_blank}
+[Complete_Packaging_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_4_Complete_Packaging_Template.csv){target=_blank}
## Example
@@ -119,10 +124,11 @@ The specification of this csv file is as follows:
``` json linenums="1"
{
"identifier": "C29B4703-121C-7552-D905-FD5AB263D611",
- "name": "2022 P06 2 Star Summer CHL Salad And Dips Guacamole Dip",
+ "name": "Salad And Dips Guacamole Dip",
"description": "A clear pot, film and lid in a decorative sleeve packed into an outercase.",
- "tags": {
- "GTIN":"00123456789012"
+ "externalIdentifiers": {
+ "internalIdentifer": "GUA-PET-2022-2341",
+ "GTIN": "00123456789012"
},
"imageURL": [
"https://dsposal-my.sharepoint.com/:i:/g/personal/tom_yourdsposal_uk/Eblhs6hbkTFAo6SNdYh1ew8BfRwTFna21RyzaKJSq6xX9g?e=0BJKsf",
@@ -130,7 +136,7 @@ The specification of this csv file is as follows:
"https://dsposal-my.sharepoint.com/:i:/g/personal/tom_yourdsposal_uk/ETQTTA8p1Y5Aj-eIThf6M4wBdunvvSVdVoV0bFqK6Nyfhw?e=DKRcHq"
],
- "componentItems": [
+ "completePackagingConstituentsIdentifier": [
"278EFE8A-720A-06C1-A411-CB94878AD3E2",
"4CF8CE85-BA1A-BACB-670E-FAAB71D97D95",
"661C7790-94D1-147D-7BF4-D518EAF5FA32",
@@ -138,9 +144,9 @@ The specification of this csv file is as follows:
],
"LOWcodeWOproduct": "15 01 06",
"productType": {
- "identifier":"complete-packaging-product-type-0001",
+ "identifier":"cp-product-type-0001",
"category":"food",
- "detailed":""
+ "detailed":"The product is fit and suitable to be eaten."
},
"componentContactWithProduct": [
"278EFE8A-720A-06C1-A411-CB94878AD3E2",
@@ -150,16 +156,16 @@ The specification of this csv file is as follows:
"onTheGo": "FALSE",
"householdWaste": "TRUE",
"depositReturnScheme": {
- "identifier":"complete-packaging-drs-0005",
+ "identifier":"cp-drs-0005",
"name":"none",
"description":""
},
"recyclingDisruptors": "",
"recyclability": 0,
"recyclabilitySource": {
- "identifier":"complete-packaging-recyclability-source-0001",
+ "identifier":"recyclability-source-0001",
"category":"OPRL",
- "detailed":""
+ "detailed":"OPRL is a not-for-profit company limited by guarantee, any surpluses being reinvested in our activities to promote recycling of packaging."
},
"recyclabilityDate": "01/08/2022",
"height": 51.5,
@@ -176,6 +182,13 @@ The specification of this csv file is as follows:
"servingCapacity": 4,
"servingCapacityDate": "01/08/2022",
"partOfMultipack": "TRUE",
+ "certification": "TRUE",
+ "certificationSource": {
+ "identifier": "certification-source-0002",
+ "category": "FSA",
+ "detailed": "The Food Standards Agency (FSA) is the independent government department working to protect public health and consumers’ wider interests in relation to food in England, Wales and Northern Ireland."
+ },
+ "certificationDate": "01/08/2022",
"updateDate": "01/08/2022",
"releaseDate": "01/08/2022",
"discontinueDate": ""
diff --git a/docs/3_Data_Specification/3_5_Multipack.md b/docs/3_Data_Specification/3_5_Multipack.md
index b29c642a..c7514408 100644
--- a/docs/3_Data_Specification/3_5_Multipack.md
+++ b/docs/3_Data_Specification/3_5_Multipack.md
@@ -1,5 +1,6 @@
---
title: Multipack
+description: Multipacks contain multiple identical packaging items within Open 3P.
---
# Multipack
@@ -11,12 +12,11 @@ The multipack schema contains information regarding the multipacks that are used
## Table
|Column|
Status
|Format|Notes|
|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
|name|`recommended`|String|The name of this multipack.|
|description|`recommended`|String|A brief description of this multipack.|
-|tags|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the complete packaging in other systems. For example: bar codes or global trade item number (gtin). To provide tags please follow this format. `{'tagName1': 'identifier1', 'tagName2': 'identifier2'}`|
-|multipackIdentifier|`required`|String|The unique identifier of the created multipack. A globally unique identifier. See identifiers section for information on how to construct this identifier.|
-|packagingItems|`required`|String|The complete packaging and/or the component identifiers used to create the multipack. There must be an equivalent record in the `complete_packaging` or `component_Catalogue` data.|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the multipack in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|multipackConstituentsIdentifiers|`required`|List|The information regarding the consituents that are combined to create this multipack. The entries should be from the [Multipack Constituents Relationship List](../6_Relationship_Lists/6_004_Multipack_Constituents.md) identifier.|
|tier|`recommended`|Integer|The tier associated with the multipack. The inner most tier denoted as 1, and the outermost tier is the biggest number.|
|identicalQuantity|`required`|Numeric|Number of identical units for the unique complete packaging item or a component this row corresponds to.|
|updateDate|`required`|String|The date that the multipack was provided/last updated. Use the format `dd/mm/yyyy`.|
@@ -27,39 +27,37 @@ The multipack schema contains information regarding the multipacks that are used
``` mermaid
erDiagram
-COMPONENT_CATALOGUE }o..o{ MULTIPACK : within
-COMPONENT_CATALOGUE }o..o{ COMPLETE_PACKAGING : within
+COMPONENTS }o..o{ MULTIPACK : within
+COMPONENTS }o..o{ COMPLETE_PACKAGING : within
COMPLETE_PACKAGING }o..o{ MULTIPACK : within
MULTIPACK {
identifier String
name String
description String
- tags Dictionary
- multipackIdentifier String
- packagingItems String
+ externalIdentifiers Dictionary
+ multipackConstituentsIdentifiers List
tier String
identicalQuantity Numeric
updateDate String
releaseDate String
discontinueDate String
}
+ MULTIPACK }o--o{ RELATIONSHIP_LISTS : attributes
COMPLETE_PACKAGING }o..o{ LOAD_CATALOGUE : within
MULTIPACK }o..o{ LOAD_CATALOGUE : within
- COMPONENT_CATALOGUE }o--o{ LOAD_CATALOGUE : within
+ COMPONENTS }o--o{ LOAD_CATALOGUE : within
+ RELATIONSHIP_LISTS {
+ multipackConstituentsIdentifier required
+ }
```
-
-
## Template
Multipack should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be one multipack of a load. An example is provided.
The specification of this csv file is as follows:
-[Multipack_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_4_Multipack_Template.csv){target=_blank}
+[Multipack_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_5_Multipack_Template.csv){target=_blank}
## Example
@@ -70,7 +68,7 @@ The specification of this csv file is as follows:
"identifier": "B9574E9A-A561-BCA6-0E36-448A2E46B2BF",
"name": "4 pack of guacamole dip",
"description": "4 tubs of guacamole that are sold together. Not to be sold seperately.",
- "tags": {
+ "externalIdentifiers": {
"GTIN":"00123456789012",
},
"multipackIdentifier": "346C5546-282B-C040-CE74-DD0DD4688C0B",
diff --git a/docs/3_Data_Specification/3_6_Load_Catalogue.md b/docs/3_Data_Specification/3_6_Load_Catalogue.md
index 2fc5a875..e0774fc7 100644
--- a/docs/3_Data_Specification/3_6_Load_Catalogue.md
+++ b/docs/3_Data_Specification/3_6_Load_Catalogue.md
@@ -1,5 +1,6 @@
---
title: Load Catalogue
+description: The load catalogue aids organisations to combine products to form a load within Open 3P.
---
# Load Catalogue
@@ -9,55 +10,52 @@ All the complete packaging from different levels (primary, secondary, and tertia
## Table
|Column|
Status
|Format|Notes|
|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
|name|`recommended`|String|The name of this load.|
|description|`recommended`|String|A brief description of this load.|
-|tags|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the complete packaging in other systems. For example: bar codes or global trade item number (gtin). To provide tags please follow this format. `{'tagName1': 'identifier1', 'tagName2': 'identifier2'}`|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the load catalogue in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
|loadIdentifier|`required`|String|The unique identifier of the created load. A globally unique identifier. See identifiers section for information on how to construct this identifier.|
-|packagingItems|`required`|String|The complete packaging and/or the multipack identifiers used to create the load. There must be an equivalent record in the `complete_packaging` or `multipack` data.|
+|packagingItems|`required`|List|The complete packaging and/or the multipack identifiers used to create the load. There must be an equivalent record in the `Complete Packaging` or `Multipack` data.|
|quantityInLoad|`required`|Numeric|Number of units for the packaging items found in a load that this row corresponds to.|
-|level|`required`|String|The intended use of the component for the packaging `i.e., primary, secondary, tertiary`. The entry here should be drawn from the level controlled list.|
+|level|`required`|String|The intended use of the component for the packaging. The entry here should be drawn from the [level controlled list](../5_Controlled_Lists/5_015_Level.md).|
|updateDate|`required`|String|The date that the load catalogue was provided/last updated. Use the format `dd/mm/yyyy`.|
## Diagram
``` mermaid
erDiagram
-COMPONENT_CATALOGUE }o..o{ LOAD_CATALOGUE : within
-COMPONENT_CATALOGUE }o..o{ COMPLETE_PACKAGING : within
-COMPONENT_CATALOGUE }o..o{ MULTIPACK : within
+COMPONENTS }o..o{ LOAD_CATALOGUE : within
+COMPONENTS }o..o{ COMPLETE_PACKAGING : within
+COMPONENTS }o..o{ MULTIPACK : within
MULTIPACK }o..o{ LOAD_CATALOGUE : within
COMPLETE_PACKAGING }o..o{ LOAD_CATALOGUE : within
COMPLETE_PACKAGING }o..o{ MULTIPACK : within
LOAD_CATALOGUE {
identifier String
- materialIdentifier numeric
- materialCatalogue String
- layer String
- materialWeight String
- combinationPurpose String
+ name String
+ description String
+ externalIdentifiers Dictionary
+ loadIdentifier String
+ packagingItems List
+ quantityInLoad Numeric
+ level String
updateDate String
}
- LOAD_CATALOGUE }o..o{ CONTOLLED_LISTS : attritubes
+ LOAD_CATALOGUE }o..o{ CONTROLLED_LISTS : attributes
LOAD_CATALOGUE }o--o{ LOAD : within
- CONTOLLED_LISTS {
+ CONTROLLED_LISTS {
level required
}
```
-
-
## Template
Loads should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be a single complete package or a multipack of a load. An example is provided.
The specification of this csv file is as follows:
-[Load_Catalogue_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_5_Load_Catalogue_Template.csv){target=_blank}
+[Load_Catalogue_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_6_Load_Catalogue_Template.csv){target=_blank}
## Example
@@ -68,14 +66,14 @@ The specification of this csv file is as follows:
"identifier": "91F2060F-17CD-DA56-7746-0018A90AEF5A",
"name": "Full pallet of multipack guacamole dip",
"description": "24 cases of 3 x multipack tubs of guacamole dip",
- "tags": {
+ "externalIdentifiers": {
"GTIN":"00123456789012",
},
- "loadIdentifier": "CA88F5CE-2D09-AFE0-08D7-44804780F924",
+ "loadIdentifiers": "CA88F5CE-2D09-AFE0-08D7-44804780F924",
"packagingItems": "346C5546-282B-C040-CE74-DD0DD4688C0B",
"quantityInLoad": "72",
"level": {
- "identifier":"component-catalogue-level-0001",
+ "identifier":"lc-level-0001",
"category":"primary",
"detailed":"The individual container that you store goods in to sell to consumers. This is called a "sales unit". For example, if you sell peas in steel tins with paper labels, the primary packaging is "steel tin" and "paper label"."
},
diff --git a/docs/3_Data_Specification/3_7_Load.md b/docs/3_Data_Specification/3_7_Load.md
index bc8c428a..dff8b923 100644
--- a/docs/3_Data_Specification/3_7_Load.md
+++ b/docs/3_Data_Specification/3_7_Load.md
@@ -1,5 +1,6 @@
---
title: Load
+description: The load is the items what are delivered to a location within Open 3P.
---
# Load
@@ -9,11 +10,11 @@ All the complete packaging from different levels (primary, secondary, and tertia
## Table
|Column|
Status
|Format|Notes|
|:-|:-|:-|:-|
-|identifier|`required`|String|A globally unique identifier. See identifiers section for information on how to construct this identifier|
+|identifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
|name|`recommended`|String|The name of this load.|
|description|`recommended`|String|A brief description of this load.|
-|tags|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the complete packaging in other systems. For example: bar codes or global trade item number (gtin). To provide tags please follow this format. `{'tagName1': 'identifier1', 'tagName2': 'identifier2'}`|
-|loadIdentifier|`required`|String|The unique identifier of the created load. There must be an equivalent identifier found in the `load catalogue`.|
+|externalIdentifiers|`recommended`|Dictionary|A dictionary of identifiers that might be used to identify the load in other systems. For example: manufacturer's own internal identifier, bar codes or global trade item number (gtin). To provide external identifiers please follow this format. `{'externalIdentifierName1': 'identifier1', 'externalIdentifierName2': 'identifier2'}`|
+|loadIdentifiers|`required`|List|The unique identifier of the created load. There must be an equivalent identifier found in the `Load Catalogue`.|
|startDate|`required`|String|The date that the load began for the destination. Use the format `dd/mm/yyyy`.|
|endDate|`required`|String|The date that the load ended for the destination. Use the format `dd/mm/yyyy`.|
|destinationAddressName|`recommended`|String|The name of the load destination address.|
@@ -32,8 +33,8 @@ LOAD_CATALOGUE }o..o{ LOAD : within
identifier String
name numeric
description String
- tags Dictionary
- loadIdentifier String
+ externalIdentifier Dictionary
+ loadIdentifiers List
startDate String
destinationAddressName String
destinationAddressStreet String
@@ -44,18 +45,13 @@ LOAD_CATALOGUE }o..o{ LOAD : within
}
```
-
-
## Template
Loads should be provided as a separate csv file, in tidy format. This means that each row of the csv file should be a single load or a multi loads from the load catagolue schema. An example is provided.
The specification of this csv file is as follows:
-[Load_Template.csv](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_6_Load_Template.csv){target=_blank}
+[Load_Template.csv](https://www.open3p.org/wp-content/uploads/2023/03/7_1_7_Load_Template.csv){target=_blank}
## Example
@@ -66,10 +62,10 @@ The specification of this csv file is as follows:
"identifier": "ED051AFD-EC7F-0428-B054-8837118922FE",
"name": "Weekly Load of Guacamole Dip",
"description": "24 cases of 12 tubs of guacamole dip for example company on high street west",
- "tags": {
+ "externalIdentifiers": {
"GTIN":"00123456789012",
},
- "loadIdentifier": "CA88F5CE-2D09-AFE0-08D7-44804780F924",
+ "loadIdentifiers": "CA88F5CE-2D09-AFE0-08D7-44804780F924",
"startDate": "01/08/2022",
"endDate": "01/08/2022",
"destinationAddressName": "Example Company",
diff --git a/docs/4_Identifiers/4_1_Identifiers.md b/docs/4_Identifiers/4_1_Identifiers.md
index 95311229..154848b9 100644
--- a/docs/4_Identifiers/4_1_Identifiers.md
+++ b/docs/4_Identifiers/4_1_Identifiers.md
@@ -4,9 +4,114 @@ title: Identifiers
# Identifiers
-Identifiers are the way that humans and machines can know that a particular thing is definitely that thing. In the context of Open 3P, there are different ways of talking about the various things involved. A packaging manufacturer may refer to a particular bottle as â€small clear bottle’, but a filler may know it as â€500 ml clear bottle’. In a database it may be recorded as â€0.5L PET Bottle’. While these are all referring to the same thing, it could be hard for a human to know that they are the same, and pretty much impossible for a computer.
+Identifiers are the way that humans and machines can know that a particular thing is that thing. In the context of Open 3P, there are different ways of talking about the various things involved. A packaging manufacturer may refer to a particular bottle as â€small clear bottle’, but a filler may know it as â€500 ml clear bottle’. In a database it may be recorded as â€0.5L PET Bottle’. While these are all referring to the same thing, it could be hard for a human to know that they are the same, and pretty much impossible for a computer.
+
+To help get around this, we use identifiers. These are codes that we use to unambiguously reference a particular thing. Within the Open 3P data standard we need to uniquely identify every entry. Each record in each schema needs to have an identifier. Since the packaging supply chain is global, the Open 3P data standard needs to be global and thus the unique identifier also needs to be global. We are therefore using the [Universally Unique Identifier (UUID)](https://en.wikipedia.org/wiki/Universally_unique_identifier) standard methodology to (probabilistically) guarantee uniqueness.
+
+> A universally unique identifier (UUID) is a 128-bit label used for information in computer systems. The term globally unique identifier (GUID) is also used.
+>
+> -*[A Universally Unique IDentifier (UUID) URN Namespace](https://datatracker.ietf.org/doc/html/rfc4122)*
+
+## Generating
+
+Generating a UUID must be done by a machine and there are various ways to create one.
+
+### Online
+
+There are various online tools available, including but not limited to and in no specific order:
+
+- [Online UUID Generator](https://www.uuidgenerator.net/)
+- [UUID Generator](https://www.uuidgen.org/v/4)
+- [Online UUID/GUID Generator](https://www.uuidtools.com)
+- [Generate UUID Online](https://generate-uuid.com)
+- [Webtools - Online UUID (GUID) Generator](https://www.webtools.services/uuid-generator)
+
+### In code
+
+=== "Python"
+
+ ``` py
+ import uuid
+
+ uuid.uuid4()
+ ```
+
+=== "C#"
+
+ ``` c#
+ using System;
+ using System.Diagnostics;
+
+ namespace SampleApplication {
+ class Program {
+ static void Main(string[] args) {
+ Guid myuuid = Guid.NewGuid();
+ string myuuidAsString = myuuid.ToString();
+
+ Debug.WriteLine("Your UUID is: " + myuuidAsString);
+ }
+ }
+ }
+ ```
+
+=== "Excel Function"
+
+ ``` vb
+ =CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,65535),4),"-",DEC2HEX(RANDBETWEEN(0,65535),4),"-",DEC2HEX(RANDBETWEEN(0,65535),4),"-",DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,65535),4))
+ ```
+
+=== "vba"
+
+ ``` vb
+ Function GUID$(Optional lowercase As Boolean, Optional parens As Boolean)
+ Dim k&, h$
+ GUID = Space(36)
+ For k = 1 To Len(GUID)
+ Randomize
+ Select Case k
+ Case 9, 14, 19, 24: h = "-"
+ Case 15: h = "4"
+ Case 20: h = Hex(Rnd * 3 + 8)
+ Case Else: h = Hex(Rnd * 15)
+ End Select
+ Mid$(GUID, k, 1) = h
+ Next
+ If lowercase Then GUID = LCase$(GUID)
+ If parens Then GUID = "{" & GUID & "}"
+ End Function
+ ```
+
+=== "T-SQL"
+
+ ``` t-sql
+ NEWID ( )
+ ```
+
+=== "PHP"
+
+ ``` php
+ function guidv4($data = null) {
+ // Generate 16 bytes (128 bits) of random data or use the data passed into the function.
+ $data = $data ?? random_bytes(16);
+ assert(strlen($data) == 16);
+
+ // Set version to 0100
+ $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
+ // Set bits 6-7 to 10
+ $data[8] = chr(ord($data[8]) & 0x3f | 0x80);
+
+ // Output the 36 character UUID.
+ return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
+ }
+ ```
+
+
+
+
+
+
+
-To help get around this, we use identifiers. These are codes that we use to unambiguously reference a particular thing in our database. We will provide documentation soon to explain how to create unique identifiers for everything being described in the Open 3P standard.
diff --git a/docs/5_Controlled_Lists/5_000_Controlled_Lists.md b/docs/5_Controlled_Lists/5_000_Controlled_Lists.md
new file mode 100644
index 00000000..3b00eb45
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_000_Controlled_Lists.md
@@ -0,0 +1,15 @@
+---
+title: Controlled Lists
+description: Controlled lists establish consistency in data entry.
+---
+
+# Controlled Lists
+
+Controlled lists are essential components of open data standards used to establish consistency in data entry and ensure that the data is accurate and high quality. They serve as reference points for key terms and phrases that are commonly used in the packaging industry.
+
+By using controlled lists, data contributors are able to select from a predefined set of terms instead of entering free-text, which can result in inconsistencies and errors. This helps to maintain data integrity and reduces the risk of inaccuracies that can lead to costly mistakes.
+
+Controlled lists also enable easy querying and reporting of data across the packaging supply chain. This is because each term in the list has a standardised definition and value, which allows for more precise comparisons between materials, packages and loads.
+
+Overall, controlled lists play a vital role in ensuring that data is reliable and can be easily analyzed, leading to more informed decision-making and better outcomes for all stakeholders in the packaging industry.
+
diff --git a/docs/5_Controlled_Lists/5_001_Material_Type.md b/docs/5_Controlled_Lists/5_001_Material_Type.md
new file mode 100644
index 00000000..2aff37ce
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_001_Material_Type.md
@@ -0,0 +1,14 @@
+---
+title: Material Type
+description: The material type controlled list for base materials.
+---
+
+# Material Type
+
+The Material Type controlled list identifies the type of the [base material](../3_Data_Specification/3_1_Base_Materials.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|bm-material-type-0001|biobased|from renewable products such as carbohydrates, starch, vegetable fats and oils, bacteria and other biological substances|
+|bm-material-type-0002|synthetic|derived from crude oil, natural gas or coal|
\ No newline at end of file
diff --git a/docs/5_Controlled_Lists/5_002_Certification_Source.md b/docs/5_Controlled_Lists/5_002_Certification_Source.md
new file mode 100644
index 00000000..6122dc56
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_002_Certification_Source.md
@@ -0,0 +1,16 @@
+---
+title: Certification Source
+description: The certification source controlled list.
+---
+
+# Certification Source
+
+The certification source controlled list identifies the source of the certification document. This is used in [certification claims relationship list](../6_Relationship_Lists/6_005_Certification_Claims.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|certification-source-0001|FSC|The Forest Stewardship Council (FSC) is an international non-governmental organisation dedicated to promoting responsible management of the world's forests.|
+|certification-source-0002|FSA|The Food Standards Agency (FSA) is the independent government department working to protect public health and consumers’ wider interests in relation to food in England, Wales and Northern Ireland.|
+|certification-source-0003|BS 8905:2011|Framework for the assessment of the sustainable use of materials.|
+|certification-source-0004|PEFC|The Programme for the Endorsement of Forest Certification (PEFC) is an international, non-profit, non-governmental organization which promotes sustainable forest management through independent third party certification.|
\ No newline at end of file
diff --git a/docs/5_Controlled_Lists/5_003_Material_Purpose.md b/docs/5_Controlled_Lists/5_003_Material_Purpose.md
new file mode 100644
index 00000000..dcce6821
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_003_Material_Purpose.md
@@ -0,0 +1,29 @@
+---
+title: Material Purpose
+description: The material purpose controlled list for materials.
+---
+
+# Material Purpose
+
+The material purpose controlled list identifies the purpose of this material in this combination of [material constituents](../6_Relationship_Lists/6_001_Material_Constituents.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|m-material-purpose-0001|acid scavenger|Acid scavengers, also referred to as antacids, neutralize acidic impurities, especially those that release HCl.|
+|m-material-purpose-0002|adhesive|Applied to one or both surfaces of two separate items that binds them together and resists their separation.|
+|m-material-purpose-0003|antioxidant|Used to inhibit oxidation.|
+|m-material-purpose-0004|antistatic agent|Used for treatment of materials or their surfaces in order to reduce or eliminate buildup of static electricity.|
+|m-material-purpose-0005|barrier|Used to reduce water and gas diffusion into and/or out of the material.|
+|m-material-purpose-0006|coating||
+|m-material-purpose-0007|fire retardant|Used to improve the fire resistance of materials.|
+|m-material-purpose-0008|light and heat stabilizer|Used to inhibit photo-oxidation.|
+|m-material-purpose-0009|lubricant||
+|m-material-purpose-0010|pigment||
+|m-material-purpose-0011|plasticizer||
+|m-material-purpose-0012|preservation||
+|m-material-purpose-0013|print||
+|m-material-purpose-0014|slip compound||
+|m-material-purpose-0015|structure|Providing strength and stability.|
+|m-material-purpose-0016|thermal stabilizer|Used to minimize loss of HCl within PVC, a degradation process that starts above 70 °C.|
+|m-material-purpose-0017|metal deactivators|Deactivators work by chelation to form an inactive coordination complex with the metal ion.|
\ No newline at end of file
diff --git a/docs/5_Controlled_Lists/5_004_Function.md b/docs/5_Controlled_Lists/5_004_Function.md
new file mode 100644
index 00000000..49a93e77
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_004_Function.md
@@ -0,0 +1,63 @@
+---
+title: Function
+description: The function controlled list.
+---
+
+# Function
+
+The function controlled list identifies the function of a material or a component. This is used in the following schemas:
+
+* [Materials](../3_Data_Specification/3_2_Materials.md)
+* [Components](../3_Data_Specification/3_3_Components.md)
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|function-0001|aerosol||
+|function-0002|bag||
+|function-0003|barrel||
+|function-0004|blister pack||
+|function-0005|bottle||
+|function-0006|brick||
+|function-0007|bucket||
+|function-0008|cage||
+|function-0009|can||
+|function-0010|canister||
+|function-0011|cap||
+|function-0012|carton||
+|function-0013|case||
+|function-0014|container||
+|function-0015|crate||
+|function-0016|cup||
+|function-0017|dispense||
+|function-0018|envelope||
+|function-0019|film||
+|function-0020|gable||
+|function-0021|jar||
+|function-0022|jerrycan||
+|function-0023|jug||
+|function-0024|label||
+|function-0025|lid||
+|function-0026|net||
+|function-0027|pallet||
+|function-0028|peel pack||
+|function-0029|plug||
+|function-0030|pot||
+|function-0031|pouch||
+|function-0032|pump||
+|function-0033|rack||
+|function-0034|reel||
+|function-0035|rod||
+|function-0036|roll||
+|function-0037|sachet||
+|function-0038|shrinkwrap||
+|function-0039|sleeve||
+|function-0040|stretchwrap||
+|function-0041|tray||
+|function-0042|tub||
+|function-0043|tube||
+|function-0044|vial||
+|function-0045|wire||
+|function-0046|wrapper||
+|function-0047|window||
+|function-0048|box||
diff --git a/docs/5_Controlled_Lists/5_005_Recyclability_Source.md b/docs/5_Controlled_Lists/5_005_Recyclability_Source.md
new file mode 100644
index 00000000..8dd184b5
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_005_Recyclability_Source.md
@@ -0,0 +1,15 @@
+---
+title: Recyclability Source
+description: The recyclability source controlled list.
+---
+
+# Recyclability Source
+
+The recyclability source controlled list identifies the source of the recyclability evidence. This is used in [recyclability claims relationship list](../6_Relationship_Lists/6_006_Recyclability_Claims.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|recyclability-source-0001|OPRL|OPRL is a not-for-profit company limited by guarantee, any surpluses being reinvested in our activities to promote recycling of packaging.|
+|recyclability-source-0002|Green Dot|Green Dot is a license symbol used on packaging in some European markets which shows that a fee has been paid to fund the recycling of that packaging when it becomes waste.|
+|recyclability-source-0003|RecyClass|A non-profit, cross-industry initiative facilitating the transition toward a circular plastic future.|
diff --git a/docs/5_Controlled_Lists/5_006_Shape.md b/docs/5_Controlled_Lists/5_006_Shape.md
new file mode 100644
index 00000000..1479c092
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_006_Shape.md
@@ -0,0 +1,27 @@
+---
+title: Shape
+description: The shape controlled list for components.
+---
+
+# Shape
+
+The shape controlled list identifies the shape in [components](../3_Data_Specification/3_3_Components.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-shape-0001|circle|2D shape where all points are a fixed distance from a central point|
+|c-shape-0002|cone|3D shape with circular base and narrows from the surface to the top|
+|c-shape-0003|cube|3D shape with 6 [square] faces, 8 vertices, and 12 edges|
+|c-shape-0004|cuboid|3D shape with 6 [rectangular] faces, 8 vertices, and 12 edges|
+|c-shape-0005|cylinder|3D shape with 2 parallel circular bases connected by a curved surface|
+|c-shape-0006|kite|2D shape quadrilateral with 2 pairs of sides, with each pair having of 2 adjacent sides which meet and that are equal in length|
+|c-shape-0007|parallelogram|2D shape quadrilateral with 2 pairs of equal-length adjacent (next to each other) sides and reflection symmetry across a diagonal|
+|c-shape-0008|polygons|2D shape with line segments and no curves. They include: pentagon, hexagon, octagon, nonagon, decagon, etc.|
+|c-shape-0009|rectangle|2D shape quadrilateral with 2 pairs of opposite sides equal in length|
+|c-shape-0010|rhombus|2D shape quadrilateral with all sides equal length, where opposite sides are parallel, and opposite angles are equal|
+|c-shape-0011|semi-circle|2D shape which is half of a circle|
+|c-shape-0012|sphere|3D shape with a radius that is extended to all three dimensions|
+|c-shape-0013|square|2D shape quadrilateral with 4 sides and 4 angles that are equal|
+|c-shape-0014|trapezium|2D shape quadrilateral with at least 1 pair of parallel sides|
+|c-shape-0015|triangle|2D shape polygon with 3 sides, 3 edges, and 3 vertices|
diff --git a/docs/5_Controlled_Lists/5_007_Flexibility.md b/docs/5_Controlled_Lists/5_007_Flexibility.md
new file mode 100644
index 00000000..f0133d04
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_007_Flexibility.md
@@ -0,0 +1,14 @@
+---
+title: Flexibility
+description: The flexibility controlled list for components.
+---
+
+# Flexibility
+
+The flexibility controlled list identifies the flexibility in [components](../3_Data_Specification/3_3_Components.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-flexibility-0001|Flexible|capable of bending easily without breaking|
+|c-flexibility-0002|Rigid|unable to bend or be forced out of shape|
diff --git a/docs/5_Controlled_Lists/5_008_Component_Disruptors.md b/docs/5_Controlled_Lists/5_008_Component_Disruptors.md
new file mode 100644
index 00000000..eccf04a7
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_008_Component_Disruptors.md
@@ -0,0 +1,51 @@
+---
+title: Component Disruptors
+description: The disruptors controlled list for components.
+---
+
+# Component Disruptors
+
+The component disruptors controlled list identifies what might cause disruption during the end of life process of a component. This is used in [component end of life routes relationship list](../6_Relationship_Lists/6_007_Component_End_of_Life_Routes.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-disruptors-0001|Acrylic > 5%||
+|c-disruptors-0002|Acrylic Barriers||
+|c-disruptors-0003|Adhesives non water soluble at 80 degrees||
+|c-disruptors-0004|Biological residue||
+|c-disruptors-0005|Breakdown products of intentionally added substances||
+|c-disruptors-0006|Carbon Black||
+|c-disruptors-0007|Chemical residue||
+|c-disruptors-0008|Colour||
+|c-disruptors-0009|Compostable/ biodegradable||
+|c-disruptors-0010|Contains fragments of Glass||
+|c-disruptors-0011|EVA with Aluminium||
+|c-disruptors-0012|EVOH > 5 %||
+|c-disruptors-0013|Fillers that increase density PP above 0.97 g/cm2||
+|c-disruptors-0014|Fillers that increase density of HDPE above 0.995 g/cm2||
+|c-disruptors-0015|Foamed thermoplastic non-polyolefin elastomers||
+|c-disruptors-0016|Food residue||
+|c-disruptors-0017|"Hazardous Contents (chemicals, household cleaning)"||
+|c-disruptors-0018|Inks that contain PVC||
+|c-disruptors-0019|Inks that bleed||
+|c-disruptors-0020|Laminated metal foil||
+|c-disruptors-0021|Labels > 30 % of surface area||
+|c-disruptors-0022|Metal components||
+|c-disruptors-0023|non PO > 10%||
+|c-disruptors-0024|Non-intentionally added substances||
+|c-disruptors-0025|Nylon Barriers||
+|c-disruptors-0026|Oxydegradable / OBD||
+|c-disruptors-0027|Paper Label||
+|c-disruptors-0028|PE Seal Layer||
+|c-disruptors-0029|Potential interaction between packaging and product||
+|c-disruptors-0030|Print covering > 50 %||
+|c-disruptors-0031|PS fragments||
+|c-disruptors-0032|PVC fragments||
+|c-disruptors-0033|PVdC||
+|c-disruptors-0034|PVOH > 5%||
+|c-disruptors-0035|Silicone Valves||
+|c-disruptors-0036|SiOX > 5%||
+|c-disruptors-0037|Substances of very high concern||
+|c-disruptors-0038|Too Big|
+|c-disruptors-0039|Too Small|
diff --git a/docs/5_Controlled_Lists/5_009_Opacity.md b/docs/5_Controlled_Lists/5_009_Opacity.md
new file mode 100644
index 00000000..f53cf109
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_009_Opacity.md
@@ -0,0 +1,15 @@
+---
+title: Opacity
+description: The opacity controlled list for components.
+---
+
+# Opacity
+
+The opacity controlled list identifies the level of opacity a component has.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-opacity-0001|opaque|does not allow light to pass through; not able to be seen through; solid colour|
+|c-opacity-0002|translucent|allows light, but not detailed shapes, to pass through; semi-transparent; tinted colour|
+|c-opacity-0003|transparent|allows light to pass through so that objects behind can be distinctly seen; no colour/ clear|
diff --git a/docs/5_Controlled_Lists/5_010_Reuse_System.md b/docs/5_Controlled_Lists/5_010_Reuse_System.md
new file mode 100644
index 00000000..c6c64ffa
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_010_Reuse_System.md
@@ -0,0 +1,14 @@
+---
+title: Reuse System
+description: The reuse system controlled list for components.
+---
+
+# Reuse System
+
+The reuse system controlled list identifies the reuse system that this component is aligned to.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-reuse-system-0001|Loop|Loop is a global reuse platform enabled by a multistakeholder coalition.|
+|c-reuse-system-0002|Reath|Reath’s Open Data Standard, designed for reusable packaging.|
diff --git a/docs/5_Controlled_Lists/5_011_Recycled_Content_Evidence_Type.md b/docs/5_Controlled_Lists/5_011_Recycled_Content_Evidence_Type.md
new file mode 100644
index 00000000..9e7ac623
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_011_Recycled_Content_Evidence_Type.md
@@ -0,0 +1,13 @@
+---
+title: Recycled Content Evidence Type
+description: The recycled content evidence type controlled list for components.
+---
+
+# Recycled Content Evidence Type
+
+The recycled content evidence type controlled list identifies the type of evidence provided for the recycled content claim for a component.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|c-recycled-evidence-0001|certificate||
diff --git a/docs/5_Controlled_Lists/5_012_Product_Type.md b/docs/5_Controlled_Lists/5_012_Product_Type.md
new file mode 100644
index 00000000..226c2959
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_012_Product_Type.md
@@ -0,0 +1,29 @@
+---
+title: Product Type
+description: The product type controlled list for complete packaging.
+---
+
+# Product Type
+
+The product type controlled list identifies the type of product contained within a complete packaging item.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|cp-product-type-0001|food|The product is fit and suitable to be eaten.|
+|cp-product-type-0002|beverage|The product is fit and suitable to be drunk.|
+|cp-product-type-0003|comestic|The product is used to enhance or alter the appearance of the face or body.|
+|cp-product-type-0004|medicinal|The product has healing properties.|
+|cp-product-type-0005|electronic|The product is electrical, electronic equipment.|
+|cp-product-type-0006|clothing||
+|cp-product-type-0007|toy||
+|cp-product-type-0008|book||
+|cp-product-type-0009|cleaning||
+|cp-product-type-0010|pet||
+|cp-product-type-0011|automotive||
+|cp-product-type-0012|gardening||
+|cp-product-type-0013|hobby||
+|cp-product-type-0014|musical||
+|cp-product-type-0015|construction||
+|cp-product-type-0016|office||
+|cp-product-type-9999|other|The product is not in the list.|
diff --git a/docs/5_Controlled_Lists/5_013_Deposit_Return_Scheme.md b/docs/5_Controlled_Lists/5_013_Deposit_Return_Scheme.md
new file mode 100644
index 00000000..4b5d809e
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_013_Deposit_Return_Scheme.md
@@ -0,0 +1,17 @@
+---
+title: Deposit Return Scheme
+description: The deposit return scheme controlled list for complete packaging.
+---
+
+# Deposit Return Scheme
+
+The deposit return scheme controlled list identifies which, if any, deposit return scheme that this complete packaging item is aligned with.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|cp-drs-0001|England||
+|cp-drs-0002|Scotland||
+|cp-drs-0003|Wales||
+|cp-drs-0004|Northern Ireland||
+|cp-drs-0005|none||
diff --git a/docs/5_Controlled_Lists/5_014_Complete_Packaging_Disruptors.md b/docs/5_Controlled_Lists/5_014_Complete_Packaging_Disruptors.md
new file mode 100644
index 00000000..f64fd8cf
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_014_Complete_Packaging_Disruptors.md
@@ -0,0 +1,43 @@
+---
+title: Complete Packaging Disruptors
+description: The disruptors controlled list for complete packaging.
+---
+
+# Complete Packaging Disruptors
+
+The complete packaging disruptors controlled list identifiers what might disrupt the end of life process of a complete packaging item. This is used in [complete packaging end of life routes relationship list](../6_Relationship_Lists/6_008_Complete_Packaging_End_of_Life_Routes.md).
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|cp-disruptors-0001|Acrylic > 5%||
+|cp-disruptors-0002|Adhesives non water soluble at 80 degrees||
+|cp-disruptors-0003|Breakdown products of intentionally added substances||
+|cp-disruptors-0004|Carbon Black||
+|cp-disruptors-0005|Colour||
+|cp-disruptors-0006|Compostable/ biodegradable||
+|cp-disruptors-0007|Contains fragments of Glass||
+|cp-disruptors-0008|Contains fragments of PS||
+|cp-disruptors-0009|Contains fragments of PVC||
+|cp-disruptors-0010|EVA with Aluminium||
+|cp-disruptors-0011|EVOH > 5 %||
+|cp-disruptors-0012|Foamed thermoplastic non-polyolefin elastomers||
+|cp-disruptors-0013|Hazardous Contents (chemicals, household cleaning, oils etc.)||
+|cp-disruptors-0014|Inks that bleed||
+|cp-disruptors-0015|Inks that contain PVC||
+|cp-disruptors-0016|Labels > 30 % of surface area||
+|cp-disruptors-0017|Laminated metal foil||
+|cp-disruptors-0018|Metal components||
+|cp-disruptors-0019|non PO > 10%||
+|cp-disruptors-0020|Nylon Barriers||
+|cp-disruptors-0021|Oxydegradable / OBD||
+|cp-disruptors-0022|Paper Label||
+|cp-disruptors-0023|PE Seal Layer||
+|cp-disruptors-0024|Print covering > 50 %||
+|cp-disruptors-0025|PVdC||
+|cp-disruptors-0026|PVOH > 5%||
+|cp-disruptors-0027|Residue - biological||
+|cp-disruptors-0028|Residue - chemical||
+|cp-disruptors-0029|Residue - food||
+|cp-disruptors-0030|Too Big||
+|cp-disruptors-0031|Too Small||
diff --git a/docs/5_Controlled_Lists/5_015_Level.md b/docs/5_Controlled_Lists/5_015_Level.md
new file mode 100644
index 00000000..d9f52b97
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_015_Level.md
@@ -0,0 +1,16 @@
+---
+title: Level
+description: The level controlled list for the load catalogue.
+---
+
+# Level
+
+The level controlled list identifies the level or tier a complete packaging item is at.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|lc-level-0001|primary|The individual container that you store goods in to sell to consumers. This is called a sales unit. For example, if you sell peas in steel tins with paper labels, the primary packaging is steel tin and paper label.|
+|lc-level-0002|secondary|For grouping several sales units for selling or shipping purposes. Organisations may use secondary packaging to display goods in shops. For example, if you place one or more tins of peas into a cardboard box, then sell the box to a retailer or ship it to the consumer, the secondary packaging is cardboard box.|
+|lc-level-0003|shipment|A type of secondary packaging for shipping single or multiple sales units to consumers. This includes cardboard boxes and mailing bags. For example, if you place a mobile phone in a cardboard box and then place the box into a mail bag before shipping it, the shipment packaging is mail bag. The primary packaging is cardboard box.|
+|lc-level-0004|transit|Transit or tertiary packaging is used to group secondary packaging units together to protect them while being transported or handled. For example, if secondary packaging units are placed into larger cardboard boxes that are sealed with parcel tape and put onto wooden pallets to be transported, the transit packaging is cardboard box, parcel tape and wooden pallet. Transit packaging does not include road, rail, ship and air containers.|
diff --git a/docs/5_Controlled_Lists/5_016_End_Of_Life_Route.md b/docs/5_Controlled_Lists/5_016_End_Of_Life_Route.md
new file mode 100644
index 00000000..4b2d9b64
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_016_End_Of_Life_Route.md
@@ -0,0 +1,23 @@
+---
+title: End of Life Route
+description: The end-of-life route for a piece of packaing.
+---
+
+# End of Life Route
+
+The end-of-life route controlled list identifies the routes that packaging can go down once it has fulfilled it's purpose.
+
+## Data
+|
identifier
|category|detailed|
+|:-|:-|:-|
+|end-of-life-route-0001|recycling|The process of converting waste materials into new materials and objects.|
+|end-of-life-route-0002|home composting|Home composting is the process of using household waste to make compost at home.|
+|end-of-life-route-0003|food waste collection|The collection of food waste from a business or home by a business, charity or local authority.|
+|end-of-life-route-0004|green waste collection|The collection of food waste and garden from a business or home by a business, charity or local authority.|
+|end-of-life-route-0005|take back scheme|A system that allows customers to return used packaging to the manufacturer or retailer for recycling or reuse.|
+|end-of-life-route-0006|deposit return scheme|A system that allows customers to return used packaging to the manufacturer or retailer for recycling or reuse in exchange for a deposit|
+|end-of-life-route-0007|landfill|The disposal of waste materials by burying them in the ground|
+|end-of-life-route-0008|incineration|A waste treatment process that involves the combustion of substances contained in waste materials.|
+|end-of-life-route-0009|informal reuse|The practice of reusing items that would otherwise be thrown away without any formal system in place.|
+
+
diff --git a/docs/5_Controlled_Lists/5_1_1_Shape.csv b/docs/5_Controlled_Lists/5_1_1_Shape.csv
index ab091831..b7120da7 100644
--- a/docs/5_Controlled_Lists/5_1_1_Shape.csv
+++ b/docs/5_Controlled_Lists/5_1_1_Shape.csv
@@ -1,16 +1,16 @@
identifier,category,detailed
-component-catalogue-shape-0001,circle,2D shape where all points are a fixed distance from a central point
-component-catalogue-shape-0002,cone,3D shape with circular base and narrows from the surface to the top
-component-catalogue-shape-0003,cube,"3D shape with 6 [square] faces, 8 vertices, and 12 edges"
-component-catalogue-shape-0004,cuboid,"3D shape with 6 [rectangular] faces, 8 vertices, and 12 edges"
-component-catalogue-shape-0005,cylinder,3D shape with 2 parallel circular bases connected by a curved surface
-component-catalogue-shape-0006,kite,"2D shape quadrilateral with 2 pairs of sides, with each pair having of 2 adjacent sides which meet and that are equal in length"
-component-catalogue-shape-0007,parallelogram,2D shape quadrilateral with 2 pairs of equal-length adjacent (next to each other) sides and reflection symmetry across a diagonal
-component-catalogue-shape-0008,polygons,"2D shape with line segments and no curves. They include: pentagon, hexagon, octagon, nonagon, decagon, etc."
-component-catalogue-shape-0009,rectangle,2D shape quadrilateral with 2 pairs of opposite sides equal in length
-component-catalogue-shape-0010,rhombus,"2D shape quadrilateral with all sides equal length, where opposite sides are parallel, and opposite angles are equal"
-component-catalogue-shape-0011,semi-circle,2D shape which is half of a circle
-component-catalogue-shape-0012,sphere,3D shape with a radius that is extended to all three dimensions
-component-catalogue-shape-0013,square,2D shape quadrilateral with 4 sides and 4 angles that are equal
-component-catalogue-shape-0014,trapezium,2D shape quadrilateral with at least 1 pair of parallel sides
-component-catalogue-shape-0015,triangle,"2D shape polygon with 3 sides, 3 edges, and 3 vertices"
+c-shape-0001,circle,2D shape where all points are a fixed distance from a central point
+c-shape-0002,cone,3D shape with circular base and narrows from the surface to the top
+c-shape-0003,cube,3D shape with 6 [square] faces, 8 vertices, and 12 edges
+c-shape-0004,cuboid,3D shape with 6 [rectangular] faces, 8 vertices, and 12 edges
+c-shape-0005,cylinder,3D shape with 2 parallel circular bases connected by a curved surface
+c-shape-0006,kite,2D shape quadrilateral with 2 pairs of sides, with each pair having of 2 adjacent sides which meet and that are equal in length
+c-shape-0007,parallelogram,2D shape quadrilateral with 2 pairs of equal-length adjacent (next to each other) sides and reflection symmetry across a diagonal
+c-shape-0008,polygons,2D shape with line segments and no curves. They include: pentagon, hexagon, octagon, nonagon, decagon, etc.
+c-shape-0009,rectangle,2D shape quadrilateral with 2 pairs of opposite sides equal in length
+c-shape-0010,rhombus,2D shape quadrilateral with all sides equal length, where opposite sides are parallel, and opposite angles are equal
+c-shape-0011,semi-circle,2D shape which is half of a circle
+c-shape-0012,sphere,3D shape with a radius that is extended to all three dimensions
+c-shape-0013,square,2D shape quadrilateral with 4 sides and 4 angles that are equal
+c-shape-0014,trapezium,2D shape quadrilateral with at least 1 pair of parallel sides
+c-shape-0015,triangle,2D shape polygon with 3 sides, 3 edges, and 3 vertices
\ No newline at end of file
diff --git a/docs/5_Controlled_Lists/5_1_2_Function.csv b/docs/5_Controlled_Lists/5_1_2_Function.csv
index 4dd85016..985f69c8 100644
--- a/docs/5_Controlled_Lists/5_1_2_Function.csv
+++ b/docs/5_Controlled_Lists/5_1_2_Function.csv
@@ -1,49 +1,49 @@
identifier,category,detailed
-component-catalogue-function-0001,aerosol,
-component-catalogue-function-0002,bag,
-component-catalogue-function-0003,barrel,
-component-catalogue-function-0004,blister pack,
-component-catalogue-function-0005,bottle,
-component-catalogue-function-0006,brick,
-component-catalogue-function-0007,bucket,
-component-catalogue-function-0008,cage,
-component-catalogue-function-0009,can,
-component-catalogue-function-0010,canister,
-component-catalogue-function-0011,cap,
-component-catalogue-function-0012,carton,
-component-catalogue-function-0013,case,
-component-catalogue-function-0014,container,
-component-catalogue-function-0015,crate,
-component-catalogue-function-0016,cup,
-component-catalogue-function-0017,dispense,
-component-catalogue-function-0018,envelope,
-component-catalogue-function-0019,film,
-component-catalogue-function-0020,gable,
-component-catalogue-function-0021,jar,
-component-catalogue-function-0022,jerrycan,
-component-catalogue-function-0023,jug,
-component-catalogue-function-0024,label,
-component-catalogue-function-0025,lid,
-component-catalogue-function-0026,net,
-component-catalogue-function-0027,pallet,
-component-catalogue-function-0028,peel pack,
-component-catalogue-function-0029,plug,
-component-catalogue-function-0030,pot,
-component-catalogue-function-0031,pouch,
-component-catalogue-function-0032,pump,
-component-catalogue-function-0033,rack,
-component-catalogue-function-0034,reel,
-component-catalogue-function-0035,rod,
-component-catalogue-function-0036,roll,
-component-catalogue-function-0037,sachet,
-component-catalogue-function-0038,shrinkwrap,
-component-catalogue-function-0039,sleeve,
-component-catalogue-function-0040,stretchwrap,
-component-catalogue-function-0041,tray,
-component-catalogue-function-0042,tub,
-component-catalogue-function-0043,tube,
-component-catalogue-function-0044,vial,
-component-catalogue-function-0045,wire,
-component-catalogue-function-0046,wrapper,
-component-catalogue-function-0047,window,
-component-catalogue-function-0048,box,
+function-0001,aerosol,
+function-0002,bag,
+function-0003,barrel,
+function-0004,blister pack,
+function-0005,bottle,
+function-0006,brick,
+function-0007,bucket,
+function-0008,cage,
+function-0009,can,
+function-0010,canister,
+function-0011,cap,
+function-0012,carton,
+function-0013,case,
+function-0014,container,
+function-0015,crate,
+function-0016,cup,
+function-0017,dispense,
+function-0018,envelope,
+function-0019,film,
+function-0020,gable,
+function-0021,jar,
+function-0022,jerrycan,
+function-0023,jug,
+function-0024,label,
+function-0025,lid,
+function-0026,net,
+function-0027,pallet,
+function-0028,peel pack,
+function-0029,plug,
+function-0030,pot,
+function-0031,pouch,
+function-0032,pump,
+function-0033,rack,
+function-0034,reel,
+function-0035,rod,
+function-0036,roll,
+function-0037,sachet,
+function-0038,shrinkwrap,
+function-0039,sleeve,
+function-0040,stretchwrap,
+function-0041,tray,
+function-0042,tub,
+function-0043,tube,
+function-0044,vial,
+function-0045,wire,
+function-0046,wrapper,
+function-0047,window,
+function-0048,box,
\ No newline at end of file
diff --git a/docs/5_Controlled_Lists/5_1_3_Flexibility.csv b/docs/5_Controlled_Lists/5_1_3_Flexibility.csv
index d2bd0906..8ad25ee6 100644
--- a/docs/5_Controlled_Lists/5_1_3_Flexibility.csv
+++ b/docs/5_Controlled_Lists/5_1_3_Flexibility.csv
@@ -1,3 +1,3 @@
identifier,category,detailed
-component-catalogue-flexibility-0001,Flexible,
-component-catalogue-flexibility-0002,Rigid,
+c-flexibility-0001,Flexible,capable of bending easily without breaking
+cflexibility-0002,Rigid,unable to bend or be forced out of shape
diff --git a/docs/5_Controlled_Lists/5_1_4_Component_Catalogue_Recycling_Disruptors.csv b/docs/5_Controlled_Lists/5_1_4_Component_Catalogue_Recycling_Disruptors.csv
deleted file mode 100644
index 55b66423..00000000
--- a/docs/5_Controlled_Lists/5_1_4_Component_Catalogue_Recycling_Disruptors.csv
+++ /dev/null
@@ -1,40 +0,0 @@
-identifier,category,detailed
-component-catalogue-disruptors-0001,Acrylic > 5%,
-component-catalogue-disruptors-0002,Acrylic Barriers,
-component-catalogue-disruptors-0003,Adhesives non water soluble at 80 degrees,
-component-catalogue-disruptors-0004,Biological residue,
-component-catalogue-disruptors-0005,Breakdown products of intentionally added substances,
-component-catalogue-disruptors-0006,Carbon Black,
-component-catalogue-disruptors-0007,Chemical residue,
-component-catalogue-disruptors-0008,Colour,
-component-catalogue-disruptors-0009,Compostable/ biodegradable,
-component-catalogue-disruptors-0010,Contains fragments of Glass,
-component-catalogue-disruptors-0011,EVA with Aluminium,
-component-catalogue-disruptors-0012,EVOH > 5 %,
-component-catalogue-disruptors-0013,Fillers that increase density PP above 0.97 g/cm2,
-component-catalogue-disruptors-0014,Fillers that increase density of HDPE above 0.995 g/cm2,
-component-catalogue-disruptors-0015,Foamed thermoplastic non-polyolefin elastomers,
-component-catalogue-disruptors-0016,Food residue,
-component-catalogue-disruptors-0017,"Hazardous Contents (chemicals, household cleaning)",
-component-catalogue-disruptors-0018,Inks that contain PVC,
-component-catalogue-disruptors-0019,Inks that bleed,
-component-catalogue-disruptors-0020,Laminated metal foil,
-component-catalogue-disruptors-0021,Labels > 30 % of surface area,
-component-catalogue-disruptors-0022,Metal components,
-component-catalogue-disruptors-0023,non PO > 10%,
-component-catalogue-disruptors-0024,Non-intentionally added substances,
-component-catalogue-disruptors-0025,Nylon Barriers,
-component-catalogue-disruptors-0026,Oxydegradable / OBD,
-component-catalogue-disruptors-0027,Paper Label,
-component-catalogue-disruptors-0028,PE Seal Layer,
-component-catalogue-disruptors-0029,Potential interaction between packaging and product,
-component-catalogue-disruptors-0030,Print covering > 50 %,
-component-catalogue-disruptors-0031,PS fragments,
-component-catalogue-disruptors-0032,PVC fragments,
-component-catalogue-disruptors-0033,PVdC,
-component-catalogue-disruptors-0034,PVOH > 5%,
-component-catalogue-disruptors-0035,Silicone Valves,
-component-catalogue-disruptors-0036,SiOX > 5%,
-component-catalogue-disruptors-0037,Substances of very high concern,
-component-catalogue-disruptors-0038,Too Big,
-component-catalogue-disruptors-0039,Too Small,
diff --git a/docs/5_Controlled_Lists/5_1_4_Component_Recycling_Disruptors.csv b/docs/5_Controlled_Lists/5_1_4_Component_Recycling_Disruptors.csv
new file mode 100644
index 00000000..7ee42576
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_1_4_Component_Recycling_Disruptors.csv
@@ -0,0 +1,40 @@
+identifier,category,detailed
+c-recycling-disruptors-0001,Acrylic > 5%,
+c-recycling-disruptors-0002,Acrylic Barriers,
+c-recycling-disruptors-0003,Adhesives non water soluble at 80 degrees,
+c-recycling-disruptors-0004,Biological residue,
+c-recycling-disruptors-0005,Breakdown products of intentionally added substances,
+c-recycling-disruptors-0006,Carbon Black,
+c-recycling-disruptors-0007,Chemical residue,
+c-recycling-disruptors-0008,Colour,
+c-recycling-disruptors-0009,Compostable/ biodegradable,
+c-recycling-disruptors-0010,Contains fragments of Glass,
+c-recycling-disruptors-0011,EVA with Aluminium,
+c-recycling-disruptors-0012,EVOH > 5 %,
+c-recycling-disruptors-0013,Fillers that increase density PP above 0.97 g/cm2,
+c-recycling-disruptors-0014,Fillers that increase density of HDPE above 0.995 g/cm2,
+c-recycling-disruptors-0015,Foamed thermoplastic non-polyolefin elastomers,
+c-recycling-disruptors-0016,Food residue,
+c-recycling-disruptors-0017,Hazardous Contents (chemicals, household cleaning),
+c-recycling-disruptors-0018,Inks that contain PVC,
+c-recycling-disruptors-0019,Inks that bleed,
+c-recycling-disruptors-0020,Laminated metal foil,
+c-recycling-disruptors-0021,Labels > 30 % of surface area,
+c-recycling-disruptors-0022,Metal components,
+c-recycling-disruptors-0023,non PO > 10%,
+c-recycling-disruptors-0024,Non-intentionally added substances,
+c-recycling-disruptors-0025,Nylon Barriers,
+c-recycling-disruptors-0026,Oxydegradable / OBD,
+c-recycling-disruptors-0027,Paper Label,
+c-recycling-disruptors-0028,PE Seal Layer,
+c-recycling-disruptors-0029,Potential interaction between packaging and product,
+c-recycling-disruptors-0030,Print covering > 50 %,
+c-recycling-disruptors-0031,PS fragments,
+c-recycling-disruptors-0032,PVC fragments,
+c-recycling-disruptors-0033,PVdC,
+c-recycling-disruptors-0034,PVOH > 5%,
+c-recycling-disruptors-0035,Silicone Valves,
+c-recycling-disruptors-0036,SiOX > 5%,
+c-recycling-disruptors-0037,Substances of very high concern,
+c-recycling-disruptors-0038,Too Big,
+c-recycling-disruptors-0039,Too Small,
diff --git a/docs/5_Controlled_Lists/5_1_5_Opacity.csv b/docs/5_Controlled_Lists/5_1_5_Opacity.csv
index 3c53f941..1b7d771a 100644
--- a/docs/5_Controlled_Lists/5_1_5_Opacity.csv
+++ b/docs/5_Controlled_Lists/5_1_5_Opacity.csv
@@ -1,4 +1,4 @@
identifier,category,detailed
-component-catalogue-opacity-0001,opaque,does not allow light to pass through; not able to be seen through; solid colour
-component-catalogue-opacity-0002,translucent,"allows light, but not detailed shapes, to pass through; semi-transparent; tinted colour"
-component-catalogue-opacity-0003,transparent,allows light to pass through so that objects behind can be distinctly seen; no colour/ clear
+c-opacity-0001,opaque,does not allow light to pass through; not able to be seen through; solid colour
+c-opacity-0002,translucent,allows light, but not detailed shapes, to pass through; semi-transparent; tinted colour
+c-opacity-0003,transparent,allows light to pass through so that objects behind can be distinctly seen; no colour/ clear
diff --git a/docs/5_Controlled_Lists/5_1_6_Level.csv b/docs/5_Controlled_Lists/5_1_6_Level.csv
index 41eec5cd..47f94dc9 100644
--- a/docs/5_Controlled_Lists/5_1_6_Level.csv
+++ b/docs/5_Controlled_Lists/5_1_6_Level.csv
@@ -1,6 +1,6 @@
identifier,category,detailed
-component-catalogue-level-0001,primary,"The individual container that you store goods in to sell to consumers. This is called a ‘sales unit’. For example, if you sell peas in steel tins with paper labels, the primary packaging is ‘steel tin’ and ‘paper label’."
-component-catalogue-level-0002,secondary,"For grouping several ‘sales units’ for selling or shipping purposes. Organisations may use secondary packaging to display goods in shops. For example, if you place one or more tins of peas into a cardboard box, then sell the box to a retailer or ship it to the consumer, the secondary packaging is ‘cardboard box’."
-component-catalogue-level-0003,shipment,"A type of secondary packaging for shipping single or multiple sales units to consumers. This includes cardboard boxes and mailing bags. For example, if you place a mobile phone in a cardboard box and then place the box into a mail bag before shipping it, the shipment packaging is ‘mail bag’. The primary packaging is ‘cardboard box’."
-component-catalogue-level-0004,transit,"Transit or tertiary packaging is used to group secondary packaging units together to protect them while being transported or handled. For example, if secondary packaging units are placed into larger cardboard boxes that are sealed with parcel tape and put onto wooden pallets to be transported, the transit packaging is ‘cardboard box’, ‘parcel tape’ and ‘wooden pallet’.
-Transit packaging does not include road, rail, ship and air containers. "
+lc-level-0001,primary,The individual container that you store goods in to sell to consumers. This is called a sales unit. For example, if you sell peas in steel tins with paper labels, the primary packaging is steel tin and paper label.
+lc-level-0002,secondary,For grouping several sales units for selling or shipping purposes. Organisations may use secondary packaging to display goods in shops. For example, if you place one or more tins of peas into a cardboard box, then sell the box to a retailer or ship it to the consumer, the secondary packaging is cardboard box.
+lc-level-0003,shipment,A type of secondary packaging for shipping single or multiple sales units to consumers. This includes cardboard boxes and mailing bags. For example, if you place a mobile phone in a cardboard box and then place the box into a mail bag before shipping it, the shipment packaging is mail bag. The primary packaging is cardboard box.
+lc-level-0004,transit,Transit or tertiary packaging is used to group secondary packaging units together to protect them while being transported or handled. For example, if secondary packaging units are placed into larger cardboard boxes that are sealed with parcel tape and put onto wooden pallets to be transported, the transit packaging is cardboard box, parcel tape and wooden pallet.
+Transit packaging does not include road, rail, ship and air containers.
diff --git a/docs/5_Controlled_Lists/5_1_7_Reuse_System.csv b/docs/5_Controlled_Lists/5_1_7_Reuse_System.csv
index d862891a..05e53e47 100644
--- a/docs/5_Controlled_Lists/5_1_7_Reuse_System.csv
+++ b/docs/5_Controlled_Lists/5_1_7_Reuse_System.csv
@@ -1,2 +1,3 @@
identifier,category,detailed
-component-catalogue-reuse-0001,Loop,
+c-reuse-system-0001,Loop,Loop is a global reuse platform enabled by a multistakeholder coalition.
+c-reuse-system-0002,Reath,Reath’s Open Data Standard designed for reusable packaging.
diff --git a/docs/5_Controlled_Lists/5_1_8_Recycled_Evidence_Type.csv b/docs/5_Controlled_Lists/5_1_8_Recycled_Evidence_Type.csv
index b0043899..ce83586f 100644
--- a/docs/5_Controlled_Lists/5_1_8_Recycled_Evidence_Type.csv
+++ b/docs/5_Controlled_Lists/5_1_8_Recycled_Evidence_Type.csv
@@ -1,2 +1,2 @@
identifier,category,detailed
-component-catalogue-recycled-evidence-0001,certificate,
+c-recycled-evidence-0001,certificate,
diff --git a/docs/5_Controlled_Lists/5_1_Controlled_Lists_Component_Catalogue.md b/docs/5_Controlled_Lists/5_1_Controlled_Lists_Component_Catalogue.md
deleted file mode 100644
index 8bfcc690..00000000
--- a/docs/5_Controlled_Lists/5_1_Controlled_Lists_Component_Catalogue.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Component Catalogue
-
-Controlled lists are possible options in certain fields of the dataset. These are items that are maintained by a custodian of the data.
-
-It is important that these controlled lists are adhered to. Software developers building applications or services around this standard will rely on these options. Some software developers at the publishing end may introduce validation of the data to ensure compliance with these controlled lists.
-
-**Note:** Please use the controlled list that is tied to each a specific dataset. For instance, there are recycling disruptor controlled lists for the `Component Catalogue`, and `Complete Packaging` that will have unique identifiers and items specific to the context.
-
-The controlled lists in use in the standard for component catalogue are:
-
-* Shape
-* Function
-* Flexibility
-* Component Catalogue Recycling Disruptors
-* Opacity
-* Level
-* Reuse System
-* Recycled Content Evidence Type
-
-## 1. Shape
-
-[Shape Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_1_Shape.csv){target=_blank}
-
-## 2. Function
-
-[Function Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_2_Function.csv){target=_blank}
-
-## 3. Flexibility
-
-[Flexibility Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_3_Flexibility.csv){target=_blank}
-
-## 4. Component Catalogue Recycling Disruptors
-
-[Component Catalogue Recycling Disruptors Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_4_Component_Catalogue_Recycling_Disruptors.csv){target=_blank}
-
-## 5. Opacity
-
-[Opacity Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_5_Opacity.csv){target=_blank}
-
-## 6. Level
-
-[Level Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_6_Level.csv){target=_blank}
-
-## 7. Reuse System
-
-[Reuse System Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_7_Reuse_System.csv){target=_blank}
-
-## 8. Recycled Content Evidence Type
-
-[Recycled Content Evidence Type](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_1_8_Recycled_Evidence_Type.csv){target=_blank}
diff --git a/docs/5_Controlled_Lists/5_2_1_Material_Type.csv b/docs/5_Controlled_Lists/5_2_1_Material_Type.csv
index 88350d64..9fce2323 100644
--- a/docs/5_Controlled_Lists/5_2_1_Material_Type.csv
+++ b/docs/5_Controlled_Lists/5_2_1_Material_Type.csv
@@ -1,3 +1,3 @@
identifier,category,detailed
-material-component-catalogue-type-0001,biobased,"from renewable products such as carbohydrates, starch, vegetable fats and oils, bacteria and other biological substances"
-material-component-catalogue-type-0002,synthetic,"derived from crude oil, natural gas or coal"
+material-component-catalogue-type-0001,biobased,from renewable products such as carbohydrates, starch, vegetable fats and oils, bacteria and other biological substances
+material-component-catalogue-type-0002,synthetic,derived from crude oil, natural gas or coal
diff --git a/docs/5_Controlled_Lists/5_2_2_Material_Purpose.csv b/docs/5_Controlled_Lists/5_2_2_Material_Purpose.csv
index cf9ec442..99845c39 100644
--- a/docs/5_Controlled_Lists/5_2_2_Material_Purpose.csv
+++ b/docs/5_Controlled_Lists/5_2_2_Material_Purpose.csv
@@ -1,17 +1,17 @@
identifier,category,detailed
-material-component-catalogue-purpose-0001,acid scavenger,
-material-component-catalogue-purpose-0002,adhesive,
-material-component-catalogue-purpose-0003,antioxidant,
-material-component-catalogue-purpose-0004,antistatic agent,
-material-component-catalogue-purpose-0005,barrier,
-material-component-catalogue-purpose-0006,coating,
-material-component-catalogue-purpose-0007,fire retardant,
-material-component-catalogue-purpose-0008,light and heat stabilizer,
-material-component-catalogue-purpose-0009,lubricant,
-material-component-catalogue-purpose-0010,pigment,
-material-component-catalogue-purpose-0011,plasticizer,
-material-component-catalogue-purpose-0012,preservation,
-material-component-catalogue-purpose-0013,print,
-material-component-catalogue-purpose-0014,slip compound,
-material-component-catalogue-purpose-0015,structure,
-material-component-catalogue-purpose-0016,thermal stabilizer,
+m-material-purpose-0001,acid scavenger,
+m-material-purpose-0002,adhesive,
+m-material-purpose-0003,antioxidant,
+m-material-purpose-0004,antistatic agent,
+m-material-purpose-0005,barrier,
+m-material-purpose-0006,coating,
+m-material-purpose-0007,fire retardant,
+m-material-purpose-0008,light and heat stabilizer,
+m-material-purpose-0009,lubricant,
+m-material-purpose-0010,pigment,
+m-material-purpose-0011,plasticizer,
+m-material-purpose-0012,preservation,
+m-material-purpose-0013,print,
+m-material-purpose-0014,slip compound,
+m-material-purpose-0015,structure,
+m-material-purpose-0016,thermal stabilizer,
diff --git a/docs/5_Controlled_Lists/5_2_4_Certification_Source.csv b/docs/5_Controlled_Lists/5_2_4_Certification_Source.csv
new file mode 100644
index 00000000..34bf70f7
--- /dev/null
+++ b/docs/5_Controlled_Lists/5_2_4_Certification_Source.csv
@@ -0,0 +1,3 @@
+identifier,category,detailed
+certification-source-0001,FSC,The Forest Stewardship Council (FSC) is an international, non-governmental organisation dedicated to promoting responsible management of the world’s forests.
+certification-source-0002,FSA,The Food Standards Agency (FSA) is the independent government department working to protect public health and consumers’ wider interests in relation to food in England, Wales and Northern Ireland.
diff --git a/docs/5_Controlled_Lists/5_2_Controlled_Lists_Component_Catalogue_Materials.md b/docs/5_Controlled_Lists/5_2_Controlled_Lists_Component_Catalogue_Materials.md
deleted file mode 100644
index 77a07d39..00000000
--- a/docs/5_Controlled_Lists/5_2_Controlled_Lists_Component_Catalogue_Materials.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Materials
-
-Controlled lists are possible options in certain fields of the dataset. These are items that are maintained by a custodian of the data.
-
-It is important that these controlled lists are adhered to. Software developers building applications or services around this standard will rely on these options. Some software developers at the publishing end may introduce validation of the data to ensure compliance with these controlled lists.
-
-**Note:** Please use the controlled list that is tied to each a specific dataset. For instance, there are recycling disruptor controlled lists for the `Component Catalogue`, `Unique Component`, and `Complete Packaging` that will have unique identifiers and items specific to the context.
-
-The controlled lists in use in the standard for component catalogue materials are:
-
-* Material Type
-* Material Purpose
-* Material Category
-
-## 1. Material Type
-
-[Material Type Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_2_1_Material_Type.csv){target=_blank}
-
-## 2. Material Purpose
-
-[Material Purpose Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_2_2_Material_Purpose.csv){target=_blank}
-
-## 3. Material Category
-
-[Material Category Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_2_3_Material_Category.csv){target=_blank}
diff --git a/docs/5_Controlled_Lists/5_3_1_Product_Type.csv b/docs/5_Controlled_Lists/5_3_1_Product_Type.csv
index fdacba15..afdff157 100644
--- a/docs/5_Controlled_Lists/5_3_1_Product_Type.csv
+++ b/docs/5_Controlled_Lists/5_3_1_Product_Type.csv
@@ -1,4 +1,4 @@
identifier,category,detailed
-complete-packaging-product-type-0001,food,
-complete-packaging-product-type-0002,medicinal,
-complete-packaging-product-type-0003,NA,
+cp-product-type-0001,food,
+cp-product-type-0002,medicinal,
+cp-product-type-0003,NA,
diff --git a/docs/5_Controlled_Lists/5_3_2_Deposit_Return_Scheme.csv b/docs/5_Controlled_Lists/5_3_2_Deposit_Return_Scheme.csv
index cb74178c..bdbf7ae5 100644
--- a/docs/5_Controlled_Lists/5_3_2_Deposit_Return_Scheme.csv
+++ b/docs/5_Controlled_Lists/5_3_2_Deposit_Return_Scheme.csv
@@ -1,6 +1,6 @@
identifier,name,description
-complete-packaging-drs-0001,England,
-complete-packaging-drs-0002,Scotland,
-complete-packaging-drs-0003,Wales,
-complete-packaging-drs-0004,Northern Ireland,
-complete-packaging-drs-0005,none,
+cp-drs-0001,England,
+cp-drs-0002,Scotland,
+cp-drs-0003,Wales,
+cp-drs-0004,Northern Ireland,
+cp-drs-0005,none,
diff --git a/docs/5_Controlled_Lists/5_3_3_Complete_Packaging_Recycling_Disruptors.csv b/docs/5_Controlled_Lists/5_3_3_Complete_Packaging_Recycling_Disruptors.csv
index e1e6e050..9f38da89 100644
--- a/docs/5_Controlled_Lists/5_3_3_Complete_Packaging_Recycling_Disruptors.csv
+++ b/docs/5_Controlled_Lists/5_3_3_Complete_Packaging_Recycling_Disruptors.csv
@@ -1,32 +1,32 @@
identifier,category,detailed
-complete-packaging-disruptors-0001,Acrylic > 5%,
-complete-packaging-disruptors-0002,Adhesives non water soluble at 80 degrees,
-complete-packaging-disruptors-0003,Breakdown products of intentionally added substances,
-complete-packaging-disruptors-0004,Carbon Black,
-complete-packaging-disruptors-0005,Colour,
-complete-packaging-disruptors-0006,Compostable/ biodegradable,
-complete-packaging-disruptors-0007,Contains fragments of Glass,
-complete-packaging-disruptors-0008,Contains fragments of PS,
-complete-packaging-disruptors-0009,Contains fragments of PVC,
-complete-packaging-disruptors-0010,EVA with Aluminium,
-complete-packaging-disruptors-0011,EVOH > 5 %,
-complete-packaging-disruptors-0012,Foamed thermoplastic non-polyolefin elastomers,
-complete-packaging-disruptors-0013,"Hazardous Contents (chemicals, household cleaning, oils etc.)",
-complete-packaging-disruptors-0014,Inks that bleed,
-complete-packaging-disruptors-0015,Inks that contain PVC,
-complete-packaging-disruptors-0016,Labels > 30 % of surface area,
-complete-packaging-disruptors-0017,Laminated metal foil,
-complete-packaging-disruptors-0018,Metal components,
-complete-packaging-disruptors-0019,non PO > 10%,
-complete-packaging-disruptors-0020,Nylon Barriers,
-complete-packaging-disruptors-0021,Oxydegradable / OBD,
-complete-packaging-disruptors-0022,Paper Label,
-complete-packaging-disruptors-0023,PE Seal Layer,
-complete-packaging-disruptors-0024,Print covering > 50 %,
-complete-packaging-disruptors-0025,PVdC,
-complete-packaging-disruptors-0026,PVOH > 5%,
-complete-packaging-disruptors-0027,Residue - biological,
-complete-packaging-disruptors-0028,Residue - chemical,
-complete-packaging-disruptors-0029,Residue - food,
-complete-packaging-disruptors-0030,Too Big,
-complete-packaging-disruptors-0031,Too Small,
+cp-recycling-disruptors-0001,Acrylic > 5%,
+cp-recycling-disruptors-0002,Adhesives non water soluble at 80 degrees,
+cp-recycling-disruptors-0003,Breakdown products of intentionally added substances,
+cp-recycling-disruptors-0004,Carbon Black,
+cp-recycling-disruptors-0005,Colour,
+cp-recycling-disruptors-0006,Compostable/ biodegradable,
+cp-recycling-disruptors-0007,Contains fragments of Glass,
+cp-recycling-disruptors-0008,Contains fragments of PS,
+cp-recycling-disruptors-0009,Contains fragments of PVC,
+cp-recycling-disruptors-0010,EVA with Aluminium,
+cp-recycling-disruptors-0011,EVOH > 5 %,
+cp-recycling-disruptors-0012,Foamed thermoplastic non-polyolefin elastomers,
+cp-recycling-disruptors-0013,Hazardous Contents (chemicals"," household cleaning"," oils etc.),
+cp-recycling-disruptors-0014,Inks that bleed,
+cp-recycling-disruptors-0015,Inks that contain PVC,
+cp-recycling-disruptors-0016,Labels > 30 % of surface area,
+cp-recycling-disruptors-0017,Laminated metal foil,
+cp-recycling-disruptors-0018,Metal components,
+cp-recycling-disruptors-0019,non PO > 10%,
+cp-recycling-disruptors-0020,Nylon Barriers,
+cp-recycling-disruptors-0021,Oxydegradable / OBD,
+cp-recycling-disruptors-0022,Paper Label,
+cp-recycling-disruptors-0023,PE Seal Layer,
+cp-recycling-disruptors-0024,Print covering > 50 %,
+cp-recycling-disruptors-0025,PVdC,
+cp-recycling-disruptors-0026,PVOH > 5%,
+cp-recycling-disruptors-0027,Residue - biological,
+cp-recycling-disruptors-0028,Residue - chemical,
+cp-recycling-disruptors-0029,Residue - food,
+cp-recycling-disruptors-0030,Too Big,
+cp-recycling-disruptors-0031,Too Small,
diff --git a/docs/5_Controlled_Lists/5_3_4_Recyclability_Source.csv b/docs/5_Controlled_Lists/5_3_4_Recyclability_Source.csv
index 47926332..db6eb32c 100644
--- a/docs/5_Controlled_Lists/5_3_4_Recyclability_Source.csv
+++ b/docs/5_Controlled_Lists/5_3_4_Recyclability_Source.csv
@@ -1,2 +1,3 @@
identifier,category,detailed
-complete-packaging-recyclability-source-0001,OPRL,
+recyclability-source-0001,OPRL,OPRL is a not-for-profit company limited by guarantee any surpluses being reinvested in our activities to promote recycling of packaging.
+recyclability-source-0002,Green Dot,Green Dot is a license symbol used on packaging in some European markets which shows that a fee has been paid to fund the recycling of that packaging when it becomes waste.
diff --git a/docs/5_Controlled_Lists/5_3_Controlled_Lists_Complete_Packaging.md b/docs/5_Controlled_Lists/5_3_Controlled_Lists_Complete_Packaging.md
deleted file mode 100644
index 1a38ec7e..00000000
--- a/docs/5_Controlled_Lists/5_3_Controlled_Lists_Complete_Packaging.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Complete Packaging
-
-Controlled lists are possible options in certain fields of the dataset. These are items that are maintained by a custodian of the data.
-
-It is important that these controlled lists are adhered to. Software developers building applications or services around this standard will rely on these options. Some software developers at the publishing end may introduce validation of the data to ensure compliance with these controlled lists.
-
-**Note:** Please use the controlled list that is tied to each a specific dataset. For instance, there are recycling disruptor controlled lists for the `Component Catalogue`, and `Complete Packaging` that will have unique identifiers and items specific to the context.
-
-The controlled lists in use in the standard for complete packaging are:
-
-* Product Type
-* Deposit Return Scheme
-* Complete Packaging Recycling Disruptors
-* Recyclability Source
-
-## 1. Product Type
-
-[Product Type Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_3_1_Product_Type.csv){target=_blank}
-
-## 2. Deposit Return Scheme
-
-[Deposit Return Scheme Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_3_2_Deposit_Return_Scheme.csv){target=_blank}
-
-## 3. Complete Packaging Recycling Disruptors
-
-[Complete Packaging Recycling Disruptors Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_3_3_Complete_Packaging_Recycling_Disruptors.csv){target=_blank}
-
-## 4. Recyclability Source
-
-[Recyclability Source Controlled List](https://github.com/OpenDataManchester/PPP/blob/main/docs/5_Controlled_Lists/5_3_4_Recyclability_Source.csv){target=_blank}
diff --git a/docs/6_Relationship_Lists/6_000_Relationship_Lists.md b/docs/6_Relationship_Lists/6_000_Relationship_Lists.md
new file mode 100644
index 00000000..83c696c2
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_000_Relationship_Lists.md
@@ -0,0 +1,13 @@
+---
+title: Relationship Lists
+description: Relationship lists create user inputted connections through the standard.
+---
+
+# Relationship Lists
+
+Relationship lists are user-defined lists used in data standards to specify the relationships between different data elements. Unlike controlled lists, which are predefined within the data standard, relationship lists are populated by the user to provide context and clarity to the data being recorded.
+
+For example, in the packaging industry, a relationship list could be used to specify the relationship between a component and its associated material or between a complete package and its components. By defining these relationships, the user can ensure that the data is consistent and accurate, which can help to improve decision-making, analysis, and reporting.
+
+Relationship lists are flexible and can be customized to fit the needs of different users and applications, making them a powerful tool for managing complex data sets. However, they require careful planning and management to ensure that they are used consistently across the supply chain and that they remain relevant and up-to-date over time.
+
diff --git a/docs/6_Relationship_Lists/6_001_Material_Constituents.md b/docs/6_Relationship_Lists/6_001_Material_Constituents.md
new file mode 100644
index 00000000..2e94961d
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_001_Material_Constituents.md
@@ -0,0 +1,135 @@
+---
+title: Material Constituents
+description: The material constituents relationship list.
+---
+
+# Material Constituents
+
+The material constituents relationship list identifies the base_material and other materials that are combined to create materials. This is only used in [materials](../3_Data_Specification/3_2_Materials.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|materialConstituentsIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|materialCombinationIdentifier|`required`|String|The unique identifier of the materials that this component is made of. There must be an equivalent record in the `Base_Materials` OR `Materials` data.|
+|materialPurpose|`recommended`|String|Why is this base material or material being used? Use the identifier of the material purpose that this row relates to. The entry here should be drawn from the [Material Purpose Controlled List](../5_Controlled_Lists/5_003_Material_Purpose.md).|
+|virginMaterial|`recommended`|Numeric|The maximum allowable percent of the material that was newly created for the material.|
+|layer|`recommended`|Numeric|The layer associated with the material. The inner most layer (the layer closest to the product) denoted as 1, and the outermost layer is the biggest number.|
+|materialPercentage|`recommended`|Numeric|The percentage of the total materials making-up the material. For every unique material, materialPercentage should add to 100%.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ MATERIALS }o..o{ MATERIAL_CONSTITUENTS : within
+ MATERIAL_CONSTITUENTS {
+ materialConstituentsIdentifier String
+ materialCombinationIdentifier String
+ materialPurpose String
+ virginMaterial Numeric
+ layer Numeric
+ materialPercentage Numeric
+ }
+ MATERIAL_CONSTITUENTS }o--o{ BASE_MATERIALS : attributes
+ MATERIAL_CONSTITUENTS }o--o{ MATERIALS : attributes
+ MATERIAL_CONSTITUENTS }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ materialPurposeControlledList required }
+ }
+```
+
+## Example
+
+=== "JSON #1"
+
+ ``` json linenums="1"
+ --Fibre based composite Polyethylene, EVOH, Paper multi layer
+ {
+ [
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "materialPurpose": "m-material-purpose-0005",
+ "virginMaterial": 100,
+ "layer": 1,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "96245c85-5671-4f3d-875f-82665005e9e8",
+ "materialPurpose": "m-material-purpose-0015",
+ "virginMaterial": 100,
+ "layer": 2,
+ "materialPercentage": 27
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "materialPurpose": "m-material-purpose-0002",
+ "virginMaterial": 100,
+ "layer": 3,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "ff249e1f-5015-46b8-8655-6c920fbf2606",
+ "materialPurpose": "m-material-purpose-0003",
+ "virginMaterial": 100,
+ "layer": 4,
+ "materialPercentage": 18
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "materialPurpose": "m-material-purpose-0002",
+ "virginMaterial": 100,
+ "layer": 5,
+ "materialPercentage": 7
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "96245c85-5671-4f3d-875f-82665005e9e8",
+ "materialPurpose": "m-material-purpose-0015",
+ "virginMaterial": 100,
+ "layer": 6,
+ "materialPercentage": 27
+ },
+ {
+ "materialConstituentsIdentifier": "f87b9bb3-f141-41cf-986e-e3a32b223f09",
+ "materialCombinationIdentifier": "3ca24db2-84d5-4681-aa16-136fbdba101f",
+ "materialPurpose": "m-material-purpose-0005",
+ "virginMaterial": 100,
+ "layer": 7,
+ "materialPercentage": 7
+ },
+ ]
+ }
+ ```
+=== "JSON #2"
+
+ ``` json linenums="1"
+ --Cellulose - verbose data structure
+ {
+ "materialConstituentsIdentifier": "a4ef4dec-eceb-417d-bded-9bd1e305a440",
+ "materialCombinationIdentifier": {
+ "identifier": "m-material-purpose-0015",
+ "baseMaterialName": "Cellulose",
+ "baseMaterialType": {
+ "identifier": "bm-material-type-0001",
+ "category": "biobased",
+ "detailed": "from renewable products such as carbohydrates, starch, vegetable fats and oils, bacteria and other biological substances."
+ },
+ "baseMaterialType": "bm-material-type-0001",
+ "materialChemCID": "14055602"
+ },
+ "materialPurpose":{
+ "identifier": "m-material-purpose-0015",
+ "category": "structure",
+ "detailed": "Providing strength and stability."
+ },
+ "virginMaterial": 100,
+ "layer": null,
+ "materialPercentage": 100
+ }
+ ```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_002_Component_Constituents.md b/docs/6_Relationship_Lists/6_002_Component_Constituents.md
new file mode 100644
index 00000000..de50be67
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_002_Component_Constituents.md
@@ -0,0 +1,27 @@
+---
+title: Component Constituents
+description: The component constituents relationship list.
+---
+
+# Component Constituents
+
+The component constituents relationship list identifies the materials that are combined to create components. This is only used in [components](../3_Data_Specification/3_3_Components.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|componentConstituentsIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|materialCombinationIdentifier|`required`|String|The unique identifier of the materials that this component is made of. There must be an equivalent record in the `Materials` OR `Components` data.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+ COMPONENTS }o..o{ COMPONENT_CONSTITUENTS : within
+ COMPONENT_CONSTITUENTS {
+ componentConstituentsIdentifier String
+ componentCombinationIdentifier String
+ }
+ COMPONENT_CONSTITUENTS }o--o{ MATERIALS : attributes
+ COMPONENT_CONSTITUENTS }o--o{ COMPONENTS : attributes
+```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_003_Complete_Packaging_Constituents.md b/docs/6_Relationship_Lists/6_003_Complete_Packaging_Constituents.md
new file mode 100644
index 00000000..f211cc33
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_003_Complete_Packaging_Constituents.md
@@ -0,0 +1,28 @@
+---
+title: Complete Packaging Constituents
+description: The complete packaging constituents relationship list.
+---
+
+# Complete Packaging Constituents
+
+The complete packaging constituents relationship list identifies the components and other complete packaging that are combined to create complete packages. This is only used in [complete packaging](../3_Data_Specification/3_4_Complete_Packaging.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|completePackagingConstituentsIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|completePackagingCombinationIdentifier|`required`|String|The unique identifier of the components and/or complete packaging that this complete packaging is made of. There must be an equivalent record in the `Components` OR `Complete Packaging` data.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ COMPLETE_PACKAGING }o..o{ COMPLETE_PACKAGING_CONSTITUENTS : within
+ COMPLETE_PACKAGING_CONSTITUENTS {
+ completePackagingConstituentsIdentifier String
+ completePackagingCombinationIdentifier String
+ }
+ COMPLETE_PACKAGING_CONSTITUENTS }o--o{ COMPONENTS : attributes
+ COMPLETE_PACKAGING_CONSTITUENTS }o--o{ COMPLETE_PACKAGING : attributes
+```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_004_Multipack_Constituents.md b/docs/6_Relationship_Lists/6_004_Multipack_Constituents.md
new file mode 100644
index 00000000..543729b3
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_004_Multipack_Constituents.md
@@ -0,0 +1,28 @@
+---
+title: Multipack Constituents
+description: The multipack constituents relationship list.
+---
+
+# Multipack Constituents
+
+The multipack constituents relationship list identifies the complete packaging items that are combined to create multipacks. This is only used in [multipack](../3_Data_Specification/3_5_Multipack.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|multipackConstituentsIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|multipackCombinationIdentifier|`required`|String|The unique identifier of components and/or complete packaging that this multipack is made of. There must be an equivalent record in the `Components` OR `Complete Packaging` data.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ MULTIPACK }o..o{ MULTIPACK_CONSTITUENTS : within
+ MULTIPACK_CONSTITUENTS {
+ multipackConstituentsIdentifier String
+ multipackCombinationIdentifier String
+ }
+ MULTIPACK_CONSTITUENTS }o--o{ COMPLETE_PACKAGING : attributes
+ MULTIPACK_CONSTITUENTS }o--o{ COMPONENTS : attributes
+```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_005_Certification_Claims.md b/docs/6_Relationship_Lists/6_005_Certification_Claims.md
new file mode 100644
index 00000000..45c3f571
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_005_Certification_Claims.md
@@ -0,0 +1,39 @@
+---
+title: Certification Claims
+description: The certification claims relationship list.
+---
+
+# Certification Claims
+
+The Certification Claims relationship list identifies the certificates that can be assigned to various tables. This is used in the following schemas:
+
+* [Base Materials](../3_Data_Specification/3_1_Base_Materials.md)
+* [Materials](../3_Data_Specification/3_2_Materials.md)
+* [Components](../3_Data_Specification/3_3_Components.md)
+* [Complete Packaging](../3_Data_Specification/3_4_Complete_Packaging.md)
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|certificationIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|certificationSource|`required`|String|What source provided the certificate? The entry should be the [Certification Source Controlled List](../5_Controlled_Lists/5_002_Certification_Source.md) identifier.|
+|certificationIssueDate|`recommended`|String|The date that the certificate was provided/last updated. Use the format `dd/mm/yyyy`.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+ BASE_MATERIALS }o..o{ CERTIFICATION_CLAIMS : within
+ MATERIALS }o..o{ CERTIFICATION_CLAIMS : within
+ COMPONENTS}o..o{ CERTIFICATION_CLAIMS : within
+ COMPLETE_PACKAGING }o..o{ CERTIFICATION_CLAIMS : within
+ CERTIFICATION_CLAIMS {
+ certificationIdentifier String
+ certificationSource String
+ certificationIssueDate String
+ }
+ CERTIFICATION_CLAIMS }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ certificationSource required }
+ }
+```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_006_Recyclability_Claims.md b/docs/6_Relationship_Lists/6_006_Recyclability_Claims.md
new file mode 100644
index 00000000..b475a588
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_006_Recyclability_Claims.md
@@ -0,0 +1,36 @@
+---
+title: Recyclability Claims
+description: The recyclability claims relationship list.
+---
+
+# Recyclability Claims
+
+The recyclability claims relationship list identifies the materials that are combined to create components. This is used in the following schemas:
+
+* [Components](../3_Data_Specification/3_3_Components.md)
+* [Complete Packaging](../3_Data_Specification/3_4_Complete_Packaging.md)
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|recyclabilityIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|recyclabilitySource|`recommended`|String|What source provided the certificate? The entry should be the [recyclability source controlled list](../5_Controlled_Lists/5_005_Recyclability_Source.md) identifier.|
+|recyclabilityIssueDate|`recommended`|String|The date that the certificate was provided/last updated. Use the format `dd/mm/yyyy`.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ COMPONENTS }o..o{ RECYCLABILITY_CLAIMS : within
+ COMPLETE_PACKAGING }o..o{ RECYCLABILITY_CLAIMS : within
+ RECYCLABILITY_CLAIMS {
+ recyclabilityIdentifier String
+ recyclabilitySource String
+ recyclabilityIssueDate String
+ }
+ RECYCLABILITY_CLAIMS }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ recyclabilitySource required }
+ }
+```
\ No newline at end of file
diff --git a/docs/6_Relationship_Lists/6_007_Component_End_of_Life_Routes.md b/docs/6_Relationship_Lists/6_007_Component_End_of_Life_Routes.md
new file mode 100644
index 00000000..245c3b46
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_007_Component_End_of_Life_Routes.md
@@ -0,0 +1,35 @@
+---
+title: Component End of Life Routes
+description: The component end of life routes relationship list.
+---
+
+# Component End of Life Routes
+
+The component end of life routes relationship list identifies the purposed and intended destination and process of this component once it has completed its role as packaging. This is only used in [components](../3_Data_Specification/3_3_Components.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|componentEndOfLifeRouteIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|componentEndOfLifeRoute|`required`|String|What is the intended end of life route for this component? The entry should be the [end of life route controlled list](../5_Controlled_Lists/5_016_End_Of_Life_Route.md) identifier.|
+|orderOfPrecedence|`recommended`|Numeric|The order that end of life routes should be used. The preferred route denoted as 1, and the last best option being the biggest number.|
+|componentDisruptors|`required`|List|What challenges this end of life route for this component has. The entry should be the [component end of life route disruptors controlled list](../5_Controlled_Lists/5_008_Component_Disruptors.md) identifier.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ COMPONENTS }o..o{ COMPONENT_END_OF_LIFE_ROUTES : within
+ COMPONENT_END_OF_LIFE_ROUTES {
+ componentEndOfLifeRouteIdentifier String
+ componentEndOfLifeRoute String
+ orderOfPrecedence String
+ componentDistruptors List
+ }
+ COMPONENT_END_OF_LIFE_ROUTES }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ endOfLifeRoute required
+ componentDistruptors required }
+ }
+```
diff --git a/docs/6_Relationship_Lists/6_008_Complete_Packaging_End_of_Life_Routes.md b/docs/6_Relationship_Lists/6_008_Complete_Packaging_End_of_Life_Routes.md
new file mode 100644
index 00000000..7439b23b
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_008_Complete_Packaging_End_of_Life_Routes.md
@@ -0,0 +1,35 @@
+---
+title: Complete Packaging End of Life Routes
+description: The complete packaging end of life routes relationship list.
+---
+
+# Complete Packaging End of Life Routes
+
+The complete packaging end of life routes relationship list identifies the purposed and intended destination and process of this complete packaging once it has completed its role as packaging. This is only used in [complete packaging](../3_Data_Specification/3_4_Complete_Packaging.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|completePackagingEndOfLifeRouteIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|completePackagingEndOfLifeRoute|`recommended`|String|What is the intended end of life route for this complete packaging. The entry should be the [end of life route controlled list](../5_Controlled_Lists/5_016_End_Of_Life_Route.md) identifier.|
+|orderOfPrecedence|`recommended`|Numeric|The order that end of life routes should be used. The preferred route denoted as 1, and the last best option being the biggest number.|
+|completePackagingDisruptors|`recommended`|List|What challenges this end of life route for this complete packaging has. The entry should be the [complete packaging end of life route disruptors controlled list](../5_Controlled_Lists/5_014_Complete_Packaging_Disruptors.md) identifier.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ COMPLETE_PACKAGING }o..o{ COMPLETE_PACKAGING_END_OF_LIFE_ROUTES : within
+ COMPLETE_PACKAGING_END_OF_LIFE_ROUTES {
+ completePackagingEndOfLifeRouteIdentifier String
+ completePackagingEndOfLifeRoute String
+ orderOfPrecedence Numeric
+ completePackagingDistruptors List
+ }
+ COMPLETE_PACKAGING_END_OF_LIFE_ROUTES }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ endOfLifeRoute required
+ completePackagingDistruptors required }
+ }
+```
diff --git a/docs/6_Relationship_Lists/6_009_Recycled_Content_Claims.md b/docs/6_Relationship_Lists/6_009_Recycled_Content_Claims.md
new file mode 100644
index 00000000..251085b9
--- /dev/null
+++ b/docs/6_Relationship_Lists/6_009_Recycled_Content_Claims.md
@@ -0,0 +1,34 @@
+---
+title: Recycled Content Claims
+description: The recycled content claims relationship list.
+---
+
+# Recycled Content Claims
+
+The recycled content claims relationship list identifies the materials that are combined to create components. This is only used in [components](../3_Data_Specification/3_3_Components.md).
+
+## Data
+|Column|
Status
|Format|Notes|
+|:-|:-|:-|:-|
+|recycledContentIdentifier|`required`|String|A globally unique identifier. See [identifiers](../4_Identifiers/4_1_Identifiers.md) section for information on how to construct this identifier|
+|recycledContentEvidenceType|`recommended`|String|What source provided the certificate? The entry should be the [recyclability source controlled list](../5_Controlled_Lists/5_005_Recyclability_Source.md) identifier.|
+|recycledContentEvidenceReference|`recommended`|String|An accompanying reference number associated with the recycled content evidence type for the component.|
+|recycledContentIssueDate|`recommended`|String|The date that the recycled content evidence was issued. Use the format `dd/mm/yyyy`.|
+
+## Diagram
+
+``` mermaid
+erDiagram
+
+ COMPONENTS }o..o{ RECYCLED_CONTENT_CLAIMS : within
+ RECYCLED_CONTENT_CLAIMS {
+ recycledContentIdentifier String
+ recycledContentEvidenceType String
+ recycledContentEvidenceReference String
+ recycledContentIssueDate String
+ }
+ RECYCLED_CONTENT_CLAIMS }o--o{ CONTROLLED_LISTS : attributes
+ CONTROLLED_LISTS {
+ recycledContentEvidenceType required }
+ }
+```
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_1_Base_Materials_Template.csv b/docs/7_Supporting_Files/7_1_1_Base_Materials_Template.csv
new file mode 100644
index 00000000..a4bf4f8d
--- /dev/null
+++ b/docs/7_Supporting_Files/7_1_1_Base_Materials_Template.csv
@@ -0,0 +1 @@
+identifier,baseMaterialName,baseMaterialType,materialChemCID,certification,certificationSource,certificationDate,manufacturedCountry,updateDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_1_Material_Component_Template.csv b/docs/7_Supporting_Files/7_1_1_Material_Component_Template.csv
deleted file mode 100644
index 5430b35c..00000000
--- a/docs/7_Supporting_Files/7_1_1_Material_Component_Template.csv
+++ /dev/null
@@ -1 +0,0 @@
-identifier,materialVolume,materialType,materialPurpose,materialCategory,materialName,materialChemCID,virginMaterial,updateDate
diff --git a/docs/7_Supporting_Files/7_1_2_Material_Template.csv b/docs/7_Supporting_Files/7_1_2_Material_Template.csv
deleted file mode 100644
index 38d5c6fc..00000000
--- a/docs/7_Supporting_Files/7_1_2_Material_Template.csv
+++ /dev/null
@@ -1 +0,0 @@
-identifier,materialIdentifier,materialCatalogue,layer,materialWeight,combinationPurpose,updateDate
diff --git a/docs/7_Supporting_Files/7_1_2_Materials_Template.csv b/docs/7_Supporting_Files/7_1_2_Materials_Template.csv
new file mode 100644
index 00000000..e28c6881
--- /dev/null
+++ b/docs/7_Supporting_Files/7_1_2_Materials_Template.csv
@@ -0,0 +1 @@
+identifier,materialIdentifier,baseMaterialIdentifier,materialName,materialPurpose,virginMaterial,layer,materialWeight,combinationPurpose,certification,certificationSource,certificationDate,manufacturedCountry,updateDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_3_Component_Catalogue_Template.csv b/docs/7_Supporting_Files/7_1_3_Component_Catalogue_Template.csv
deleted file mode 100644
index d54b8827..00000000
--- a/docs/7_Supporting_Files/7_1_3_Component_Catalogue_Template.csv
+++ /dev/null
@@ -1 +0,0 @@
-identifier,name,description,tags,imageURL,LOWcode,height,heightDate,width,widthDate,depth,depthDate,volume,volumeDate,weight,weightTolerance,weightDate,shape,function,flexibility,branding,componentRecyclingDisruptors,colour,opacity,reused,reuseSystem,manufacturedCountry,recycledContent,recycledContentEvidenceType,recycledContentEvidenceReference,recyclability,recyclabilitySource,recyclabilityDate,partOfMultipack,previouslyAssembledComponent,componentLink,updateDate,releaseDate,discontinueDate
diff --git a/docs/7_Supporting_Files/7_1_3_Components_Template.csv b/docs/7_Supporting_Files/7_1_3_Components_Template.csv
new file mode 100644
index 00000000..919157fd
--- /dev/null
+++ b/docs/7_Supporting_Files/7_1_3_Components_Template.csv
@@ -0,0 +1 @@
+identifier,name,description,externalIdentifiers,imageURL,LOWcode,materialIdentifier,height,heightDate,width,widthDate,depth,depthDate,volume,volumeDate,weight,weightTolerance,weightDate,shape,function,flexibility,branding,componentRecyclingDisruptors,colour,opacity,loaned,reuseSystem,manufacturedCountry,recycledContent,recycledContentEvidenceType,recycledContentEvidenceReference,recyclability,recyclabilitySource,recyclabilityDate,partOfMultipack,certification,certificationSource,certificationDate,updateDate,releaseDate,discontinueDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_4_Complete_Packaging_Template.csv b/docs/7_Supporting_Files/7_1_4_Complete_Packaging_Template.csv
index 4a9fc0c3..0148d908 100644
--- a/docs/7_Supporting_Files/7_1_4_Complete_Packaging_Template.csv
+++ b/docs/7_Supporting_Files/7_1_4_Complete_Packaging_Template.csv
@@ -1 +1 @@
-identifier,name,description,tags,imageURL,componentItems,LOWcodeWOproduct,productType,componentContactWithProduct,LOWcodeWproduct,onTheGo,householdWaste,depositReturnScheme,recyclingDisruptors,recyclability,recyclabilitySource,recyclabilityDate,height,heightDate,width,widthDate,depth,depthDate,volume,volumeDate,weight,weightTolerance,weightDate,servingCapacity,servingCapacityDate,partOfMultipack,updateDate,releaseDate,discontinueDate
+identifier,name,description,externalIdentifiers,imageURL,componentItems,LOWcodeWOproduct,productType,componentContactWithProduct,LOWcodeWproduct,onTheGo,householdWaste,depositReturnScheme,recyclingDisruptors,recyclability,recyclabilitySource,recyclabilityDate,height,heightDate,width,widthDate,depth,depthDate,volume,volumeDate,weight,weightTolerance,weightDate,servingCapacity,servingCapacityDate,partOfMultipack,certification,certificationSource,certificationDate,updateDate,releaseDate,discontinueDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_5_Multipack_Template.csv b/docs/7_Supporting_Files/7_1_5_Multipack_Template.csv
index 6ab90321..6280f28e 100644
--- a/docs/7_Supporting_Files/7_1_5_Multipack_Template.csv
+++ b/docs/7_Supporting_Files/7_1_5_Multipack_Template.csv
@@ -1 +1 @@
-identifier,name,description,tags,multipackIdentifier,packagingItems,tier,identicalQuantity,updateDate,releaseDate,discontinueDate
+identifier,name,description,externalIdentifiers,multipackIdentifier,packagingItems,tier,identicalQuantity,updateDate,releaseDate,discontinueDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_6_Load_Catalogue_Template.csv b/docs/7_Supporting_Files/7_1_6_Load_Catalogue_Template.csv
index 9e0a2b9f..c59308c0 100644
--- a/docs/7_Supporting_Files/7_1_6_Load_Catalogue_Template.csv
+++ b/docs/7_Supporting_Files/7_1_6_Load_Catalogue_Template.csv
@@ -1 +1 @@
-identifier,name,description,tags,loadIdentifier,packagingItems,quantityInLoad,updateDate
+identifier,name,description,externalIdentifiers,loadIdentifier,packagingItems,quantityInLoad,level,updateDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_1_7_Load_Template.csv b/docs/7_Supporting_Files/7_1_7_Load_Template.csv
index b5e2f9fc..4a928bb4 100644
--- a/docs/7_Supporting_Files/7_1_7_Load_Template.csv
+++ b/docs/7_Supporting_Files/7_1_7_Load_Template.csv
@@ -1 +1 @@
-identifier,name,description,tags,loadIdentifier,startDate,endDate,destinationAddressName,destinationAddressStreet,destinationAddressCountry,destinationAddressPostalCode,timesSent,updateDate
+identifier,name,description,externalIdentifier,loadIdentifier,startDate,endDate,destinationAddressName,destinationAddressStreet,destinationAddressCountry,destinationPostalCode,timesSent,updateDate
\ No newline at end of file
diff --git a/docs/7_Supporting_Files/7_2_Example_Files.md b/docs/7_Supporting_Files/7_2_Example_Files.md
index 3dd4932d..2a2c27b0 100644
--- a/docs/7_Supporting_Files/7_2_Example_Files.md
+++ b/docs/7_Supporting_Files/7_2_Example_Files.md
@@ -1,22 +1,26 @@
# Supporting Files
-This section of the guidance provides examples of different scenarios for providing information about plastic packaging and download files for the templates
+This section of the guidance provides examples of different scenarios for providing information about packaging and download files for the templates
+
+## Excel Workbook
+
+[BETA VERSION](https://www.open3p.org/wp-content/uploads/2023/03/Open-3P-Excel-Template-Beta.xlsx)
## CSV blank
- 1. [Material Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Template.csv){target=_blank}
- 2. [Material](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Template.csv){target=_blank}
- 3. [Component Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_1_Component_Catalogue_Template.csv){target=_blank}
- 4. [Complete Packaging](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_3_Complete_Packaging_Template.csv){target=_blank}
- 5. [Multipack](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_4_Multipack_Template.csv){target=_blank}
- 6. [Load Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_5_Load_Catalogue_Template.csv){target=_blank}
- 7. [Load](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_6_Load_Template.csv){target=_blank}
+ 1. [Base Materials](https://www.open3p.org/wp-content/uploads/2023/03/7_1_1_Base_Materials_Template.csv){target=_blank}
+ 2. [Materials](https://www.open3p.org/wp-content/uploads/2023/03/7_1_2_Materials_Template.csv){target=_blank}
+ 3. [Components](https://www.open3p.org/wp-content/uploads/2023/03/7_1_3_Components_Template.csv){target=_blank}
+ 4. [Complete Packaging](https://www.open3p.org/wp-content/uploads/2023/03/7_1_4_Complete_Packaging_Template.csv){target=_blank}
+ 5. [Multipack](https://www.open3p.org/wp-content/uploads/2023/03/7_1_5_Multipack_Template.csv){target=_blank}
+ 6. [Load Catalogue](https://www.open3p.org/wp-content/uploads/2023/03/7_1_6_Load_Catalogue_Template.csvv){target=_blank}
+ 7. [Load](https://www.open3p.org/wp-content/uploads/2023/03/7_1_7_Load_Template.csv){target=_blank}
## CSV with examples
- 1. [Material Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Example.csv){target=_blank}
- 2. [Material](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Example.csv){target=_blank}
- 3. [Component Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_1_Component_Catalogue_Example.csv){target=_blank}
+ 1. [Base Materials](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_7_Materials_Catalogue_Example.csv){target=_blank}
+ 2. [Materials](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_2_Materials_Example.csv){target=_blank}
+ 3. [Components](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_1_Component_Catalogue_Example.csv){target=_blank}
4. [Complete Packaging](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_3_Complete_Packaging_Example.csv){target=_blank}
5. [Multipack](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_4_Multipack_Example.csv){target=_blank}
6. [Load Catalogue](https://www.opendatamanchester.org.uk/wp-content/uploads/2023/01/7_1_5_Load_Catalogue_Example.csv){target=_blank}
diff --git a/docs/6_Governance/6_1_Governance.md b/docs/8_Governance/8_1_Governance.md
similarity index 100%
rename from docs/6_Governance/6_1_Governance.md
rename to docs/8_Governance/8_1_Governance.md
diff --git a/docs/8_Change_Log/8_1_Change_Log.md b/docs/9_Change_Log/8_1_Change_Log.md
similarity index 86%
rename from docs/8_Change_Log/8_1_Change_Log.md
rename to docs/9_Change_Log/8_1_Change_Log.md
index 990afe1b..4f2dbc65 100644
--- a/docs/8_Change_Log/8_1_Change_Log.md
+++ b/docs/9_Change_Log/8_1_Change_Log.md
@@ -6,6 +6,39 @@ title: Latest Updates
# Latest Updates
A document that contains all the changes made to the standard.
+## March 17, 2023
+### Documents
+- General improvements
+
+## March 10, 2023
+### Documents
+- Added versioning control so that there can be parrellell versions
+- Updated Indentifiers page to include information regarding UUID
+
+## March 9, 2023
+### Documents
+- Variours changes to files for added function for versioning
+
+## February 7, 2023
+### Model
+- Changed component catologue to components
+
+### Documents
+- Added additional examples
+- Updated all data schema to based on changes
+
+### Data Fields
+- Changed tags to external identifiers
+
+## February 3, 2023
+### Model
+- Changed materials catologue to base materials
+- Added country to base materials
+
+### Documents
+- Added examples to base materials
+
+
## January 20, 2023
### Documents
- Added schema images to all Data Specification pages
diff --git a/docs/index.md b/docs/index.md
index 1b36acd2..b87840b3 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,5 +1,6 @@
---
title: Home
+description: Open 3P is an open data standard built with and for the packaging supply chain.
---
[![Open Data Manchester](img/Open3PFullColour.jpg)](https://www.opendatamanchester.org.uk/plastics-packaging-portal/){target=_blank}
@@ -10,7 +11,7 @@ A data standard for the packaging value chain.
## Version
-Version 1.0 Published 2022-08-01
+Version 2.0 -alpha PRE-RELEASE
## Working with the Standard
@@ -22,7 +23,8 @@ The standard is open and free to use, copy and distribute. However, the standard
2. [Data Formats](2_Data_Formats/2_1_Data_Formats.md)
3. [Data Specification](3_Data_Specification/3_1_Base_Materials.md)
4. [Identifiers](4_Identifiers/4_1_Identifiers.md)
-5. [Controlled Lists](5_Controlled_Lists/5_1_1_Shape.csv)
-6. [Governance](6_Governance/6_1_Governance.md)
+5. [Controlled Lists](5_Controlled_Lists/5_000_Controlled_Lists.md)
+6. [Relationship Lists](./6_Relationship_Lists/6_000_Relationship_Lists.md)
7. [Supporting Files](7_Supporting_Files/7_2_Example_Files.md)
-8. [Change Log](8_Change_Log/8_1_Change_Log.md)
+8. [Governance](./8_Governance/8_1_Governance.md)
+9. [Change Log](./9_Change_Log/8_1_Change_Log.md)
diff --git a/site/1_Start_Here/1_1_Introduction/index.html b/site/1_Start_Here/1_1_Introduction/index.html
new file mode 100644
index 00000000..3b4e0171
--- /dev/null
+++ b/site/1_Start_Here/1_1_Introduction/index.html
@@ -0,0 +1,1087 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Introduction - Open3P
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Open 3P is an open data standard for packaging. It has been developed as part of the Plastics Packaging Portals (PPP) Project, an Innovate UK supported project under the Smart Sustainable Plastic Packaging (SSPP) Fund. The project is led by OPRL alongside project partners Open Data Manchester, Dsposal, RECOUP, and Ecosurety.
+
The project brings together stakeholders from the entire packaging ecosystem to explore how we might create the foundations for systemic change
+in the packaging value chain. We have had more than 80 individuals from over 40 organisations take part in our workshops, interviews and research and we are incredibly grateful to them for sharing their time, expertise and support.
+
PPP has 5 main aims which will be delivered by 30th November 2022:
+
+
Extend the Open3R Household Waste Recycling Centre (HWRCs) data standard
+
Develop a prototype portal to capture data on geographically located recycling services such as HWRCs, bring banks, instore take back schemes
+to support a comprehensive open database of this information
+
Develop an open standard for plastic packaging data (Open 3P)
+
Develop a prototype portal to capture packaging attribute data to enable it to be shared along the plastic packaging value chain and reported on
+
Determine a sustainable business model and governance structure
+
+
Although this funding and this phase of the project is focussed on plastic packaging, which is what Open 3P covers currently, there is a commitment and desire to extend it to cover all types of packaging.
+
By improving the data quality, granularity and availability of both packaging data and recycling services data and by enabling these datasets to be linked we believe we can support more sustainable packaging choices. By giving stakeholders visibility of the different parts of the chain we can help designers and manufacturers consider the end-of-life implications of their choices and we can help them determine the difference between a material being technically recyclable and the practicality of it being recycled. Providing recyclers and reprocessors with detailed data about material types and recycling disruptors we can enable more materials to be kept at a higher value for longer. Improving these datasets also helps deliver better information into the hands of consumers to support them to recycle more. Better data on market trends in packaging can also provide more certainty and unlock investment and innovation so that we can increase our recycling infrastructure and ensure more of our waste packaging ends up recycled.
+
The standard is being developed according to the OpenStand principles of:
An open data standard is a set of rules that describe the structure and components of a dataset. Putting rules in place means people and organisations that publish and share data about the same thing can use the same language to talk about it. Having a standard makes it a lot easier to understand and reuse data that has been published and shared. It is especially useful if data is being published and shared by lots of different organisations to make an even bigger dataset. Anyone can then read about the standard, contribute data, or use the data knowing everyone is talking about the same thing.
The initial standard development was funded by Innovate UK, and is being developed through workshops with industry experts over a number of iterations.
The documentation here details how to publish data to the standard, and how to use data that has been published to the standard. At this stage, the expectation is that data management will be supported by additional applications (such as the packaging portal that is also being developed as part of this project), and it is possible to record and publish data to the standard using the provided csv files in Section 7 of this documentation.
\n }\n \n \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n \n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n \n ] : []\n ]\n\n /* Render search result */\n return (\n
\n {children}\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
\n {typeof value === \"number\" ? round(value) : value}\n
\n ))}\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n
\n \n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
\n
\n {table}\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash, see https://bit.ly/3rL5u3f */\n const url = new URL(`../${version.version}/`, config.base)\n return (\n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
\n \n
\n {versions.map(renderVersion)}\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n animationFrameScheduler,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]) => {\n const { width } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n const done$ = push$.pipe(takeLast(1))\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(500, animationFrameScheduler),\n map(() => container.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Close open annotation on click */\n const index = getElement(\":scope > :last-child\", el)\n const blur$ = fromEvent(index, \"mousedown\", { once: true })\n push$\n .pipe(\n switchMap(({ active }) => active ? blur$ : EMPTY),\n tap(ev => ev.preventDefault())\n )\n .subscribe(() => el.blur())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const comment of getElements(\".c, .c1, .cm\", container)) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n let text = comment.firstChild as Text\n if (text instanceof Text)\n while ((match = /\\((\\d+)\\)/.exec(text.textContent!))) {\n const marker = text.splitText(match.index)\n text = marker.splitText(match[0].length)\n markers.push(marker)\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { print$ }: MountOptions\n): Observable> {\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(+id, renderAnnotation(+id))\n marker.replaceWith(annotations.get(+id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Create and return component */\n return defer(() => {\n const done$ = new Subject()\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [id, annotation] of annotations) {\n const inner = getElement(\".md-typeset\", annotation)\n const child = getElement(`li:nth-child(${id})`, el)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n }\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container)\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(\"https://unpkg.com/mermaid@9.0.1/dist/mermaid.min.js\")\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ action, reveal }) => {\n if (action === \"open\")\n el.setAttribute(\"open\", \"\")\n else\n el.removeAttribute(\"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=\"${input.id}\"]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=\"${initial.id}\"]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(skip(1))\n .subscribe(({ active }) => {\n const tab = active.innerText.trim()\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=\"${input.id}\"]`)\n if (label.innerText.trim() === tab) {\n input.click()\n break\n }\n }\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable