@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix gs1: <https://ref.gs1.org/voc/> .
@prefix schema: <https://schema.org/> .
@prefix oec: <https://ref.openepcis.io/extensions/common/core/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix vann: <http://purl.org/vocab/vann/> .
# UNTP namespace references for semantic alignment (rdfs:seeAlso and owl:equivalentProperty only)
@prefix untp: <https://vocabulary.uncefact.org/untp/> .
# EU SEMICeu Core Vocabularies, peer Layer 1 alongside GS1 and schema.org.
# Bridge context: extensions/common/interop/context/semic-core-bridge-context.jsonld
# Mapping doc:    extensions/common/interop/docs/SEMIC_CORE_VOCABULARIES.md
@prefix cv:    <http://data.europa.eu/m8g/> .
@prefix legal: <http://www.w3.org/ns/legal#> .
@prefix cccev: <http://data.europa.eu/m8g/> .
@prefix locn:  <http://www.w3.org/ns/locn#> .
@prefix adms:  <http://www.w3.org/ns/adms#> .
@prefix cpsv:  <http://purl.org/vocab/cpsv#> .
@prefix org:   <http://www.w3.org/ns/org#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
# GS1 CBV: Comprehensive Business Vocabulary (EPCIS code lists).
@prefix cbv:   <https://ref.gs1.org/cbv/> .
# CIRPASS-2 pilot programme ontology proposal, Layer 2 community profile.
# Reference-only see-also pointer; CIRPASS-2 is one input into JTC 24, NOT a
# finalised EU standard. The published namespace resolves via the W3ID
# redirect (https://w3id.org/eudpp#X returns 200). Catalog: https://dpp.vocabulary-hub.eu/specifications.
# Strictly rdfs:seeAlso: no rdfs:subClassOf, no owl:equivalentClass.
@prefix cirpass2: <https://w3id.org/eudpp#> .

# DPP Keystone (dpp-keystone.org), a peer Digital Product Passport profile.
# Layer 2 community profile; aligned via the bridge in extensions/common/interop/.
# Published namespace pinned to the v2 spec. Used for SKOS mapping anchors
# (skos:exactMatch / skos:closeMatch / skos:broadMatch) from oec: terms to dppk: terms.
@prefix dppk: <https://dpp-keystone.org/spec/v2/terms#> .

# =============================================================================
# Ontology Declaration
# =============================================================================

<https://ref.openepcis.io/extensions/common/core/>
    a owl:Ontology ;
    dcterms:title "OpenEPCIS DPP Core Vocabulary"@en ;
    dcterms:description """Core vocabulary for Digital Product Passports aligned with the EU Ecodesign
for Sustainable Products Regulation (ESPR) EU 2024/1781 and GS1 DPP Standards.

OpenEPCIS DPP-Ready: The Universal DPP Platform - harmonizing GS1, UNTP, and CIRPASS2 standards.

This vocabulary provides shared patterns reusable across domain-specific regulations
(Battery, EUDR, Textile, Electronics, etc.) and supports the ESPR framework including:
- Economic operator identification (EOID per ESPR Article 77)
- Facility information (manufacturing location data)
- Performance and durability information
- Repairability and maintenance data
- Substances of concern (SCIP database alignment)
- Circularity information (end-of-life, recycling)
- Due diligence reporting (supply chain transparency)
- Document references (reports, certificates, guides)
- Access rights (public vs authorized data per ESPR Article 9)
- Emissions performance (carbon footprint with UNTP alignment)
- Traceability performance (supply chain verification metrics)

GS1 Web Vocabulary patterns to use:
- For certifications: gs1:certification with gs1:CertificationDetails
- For warranty: gs1:manufacturersWarranty with gs1:WarrantyPromise (product-scoped; gs1:warranty is Offer-scoped)
- For regulatory compliance: gs1:regulatoryInformation with gs1:RegulatoryInformation
- For documents: gs1:referencedFile with gs1:ReferencedFileDetails
- For recycling text: gs1:consumerRecyclingInstructions

UNTP Alignment:
Property naming, patterns, and value conventions are aligned with UN Transparency Protocol (UNTP)
to enable native interoperability. Cross-vocabulary mappings are declared via graded SKOS relations
(skos:exactMatch for 1:1, skos:closeMatch for approximate, skos:broadMatch where this term is narrower).
All ratio/fraction properties use 0-1 decimal scale (e.g., 0.45 = 45%).

EPCIS 2.0 Extension Declaration:
GS1-Extensions: oec=https://ref.openepcis.io/extensions/common/core/

Extension Governance:
This vocabulary extends GS1 Web Vocabulary only where no equivalent term exists.
Each extension term includes:
- dcterms:source linking to the regulatory requirement
- skos:note explaining why the extension is needed
- rdfs:seeAlso linking to related GS1/schema.org/UNTP terms where applicable
- a graded SKOS mapping relation (skos:exactMatch / skos:closeMatch / skos:broadMatch) where a cross-vocabulary match exists

Domain-specific vocabularies import this core and add regulation-specific extensions."""@en ;
    dcterms:creator "OpenEPCIS" ;
    dcterms:license <https://www.apache.org/licenses/LICENSE-2.0> ;
    dcterms:created "2024-01-15"^^xsd:date ;
    dcterms:modified "2026-06-19"^^xsd:date ;
    owl:versionInfo "0.9.9" ;
    owl:versionIRI <https://ref.openepcis.io/extensions/common/core/0.9.9> ;
    vann:preferredNamespacePrefix "oec" ;
    vann:preferredNamespaceUri "https://ref.openepcis.io/extensions/common/core/" ;
    rdfs:seeAlso <https://ref.gs1.org/voc/> ;
    rdfs:seeAlso <https://ref.gs1.org/voc/CertificationDetails> ;
    rdfs:seeAlso <https://ref.gs1.org/voc/WarrantyPromise> ;
    rdfs:seeAlso <https://ref.gs1.org/standards/epcis/> ;
    rdfs:seeAlso <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso <https://ref.gs1.org/standards/> ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf> ;
    rdfs:seeAlso <https://untp.unece.org/docs/specification/> ;
    rdfs:comment "Aligned with UN Transparency Protocol patterns"@en ;
    dcterms:source <https://untp.unece.org/docs/specification/> ;
    owl:imports <https://ref.gs1.org/voc/> ;
    owl:imports <http://data.europa.eu/m8g/> ;
    owl:imports <http://www.w3.org/ns/locn#> ;
    owl:imports <http://www.w3.org/ns/adms#> .

# =============================================================================
# Core Classes
# =============================================================================

oec:OperatorInformation
    a rdfs:Class ;
    rdfs:label "Operator Information"@en ;
    rdfs:comment """Economic operator information as required by various EU regulations.
Captures manufacturer, importer, distributor, and other operator roles.
Use gs1:globalLocationNumber for operator identification (inherited from gs1:Organization).
Use GS1 Digital Link format: https://id.gs1.org/417/{GLN}"""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:subClassOf gs1:Organization ;
    rdfs:seeAlso gs1:Organization ;
    rdfs:seeAlso schema:Organization ;
    rdfs:seeAlso legal:LegalEntity ;
    rdfs:seeAlso cirpass2:Actor ;
    rdfs:seeAlso cirpass2:LegalPerson ;
    rdfs:seeAlso cirpass2:ManufacturerRecord ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32019R1020> ;
    skos:note """Extension of gs1:Organization to capture ESPR-specific operator role requirements.
Use gs1:globalLocationNumber for operator GLN, gs1:organizationName for name.
GS1 Web Vocabulary provides gs1:Organization but lacks the specific operator role enumeration
required by EU Market Surveillance Regulation 2019/1020 and ESPR Article 77.

Related to (but NOT owl:equivalentClass with) legal:LegalEntity in the EU SEMICeu Core
Business Vocabulary. The two extensions overlap but neither contains the other:
legal:LegalEntity is broader on the non-operator side (charities, non-profits, government
bodies that are legal entities but not ESPR operators) and stricter on the registration
side (some jurisdictions treat sole-proprietor operators as natural persons, not legal
entities). Use legal:LegalEntity for EU-portal interoperability when the operator is
known to be a legally-registered business; the rdfs:seeAlso anchor is intentional and
the strongest formal claim that holds in general."""@en ;
    skos:broadMatch schema:Organization ;
    skos:closeMatch gs1:OrganizationID_Details ;
    skos:broadMatch gs1:Organization ;
    rdfs:seeAlso dppk:EconomicOperatorRole ;
    skos:broadMatch cirpass2:Actor ;
    skos:narrowMatch cirpass2:ManufacturerRecord .

oec:DueDiligenceReport
    a rdfs:Class ;
    rdfs:label "Due Diligence Report"@en ;
    rdfs:comment """Supply chain due diligence information supporting transparency requirements.
Reusable across Battery Regulation Art. 39, EUDR, and other due diligence frameworks."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:subClassOf cccev:Evidence ;
    rdfs:seeAlso cccev:Evidence ;
    rdfs:seeAlso cccev:Requirement ;
    rdfs:seeAlso cirpass2:ComplianceDeclaration ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1542> ;
    skos:note """Required extension: GS1 Web Vocabulary does not provide a class for supply chain
due diligence reporting. This is mandated by EU Battery Regulation Art. 39 and EUDR.

Anchored as rdfs:subClassOf cccev:Evidence (EU SEMICeu Core Criterion and Evidence
Vocabulary, http://data.europa.eu/m8g/Evidence), every due-diligence report is evidence
supporting a regulatory cccev:Requirement, but cccev:Evidence is much broader (test
reports, certificates, attestations, audit logs) so the relationship is subClassOf, not
owl:equivalentClass. CCCEV is the EU upstream of the UNTP conformity model."""@en ;
    skos:broadMatch schema:Report ;
    skos:broadMatch cv:Evidence .

oec:CircularityPerformance
    a rdfs:Class ;
    rdfs:label "Circularity Performance"@en ;
    rdfs:comment """Information supporting circular economy requirements including
end-of-life handling, recycling, waste prevention, and circularity metrics.
Aligned with UNTP CircularityPerformance pattern."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:seeAlso cirpass2:CircularEconomyIndicator ;
    skos:note """Required extension: GS1 provides gs1:consumerRecyclingInstructions for text-based
recycling guidance but lacks structured circularity data (recyclability rates, end-of-life URLs,
waste prevention info) required by ESPR. Use gs1:consumerRecyclingInstructions for simple text.
Aligned with UNTP CircularityPerformance for interoperability."""@en ;
    skos:narrowMatch <https://w3id.org/eudpp#RecyclingRate> .

oec:HazardousSubstance
    a rdfs:Class ;
    rdfs:label "Hazardous Substance"@en ;
    rdfs:comment """A hazardous substance declaration per EU CLP Regulation 1272/2008.
Reusable across product categories."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    rdfs:seeAlso gs1:hasAllergen ;
    rdfs:seeAlso cirpass2:Substance ;
    skos:note """Required extension: GS1 Web Vocabulary provides allergen tracking (gs1:hasAllergen)
for food products but lacks hazardous substance classes for industrial products per EU CLP
Regulation 1272/2008. This class supports REACH, SCIP, and ESPR requirements."""@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#HazardousSubstanceEntity> ;
    skos:broadMatch schema:ChemicalSubstance ;
    skos:broadMatch schema:Substance ;
    skos:broadMatch <https://w3id.org/eudpp#SubstanceOfConcern> ;
    skos:broadMatch <https://w3id.org/eudpp#Substance> .

oec:DocumentReference
    a rdfs:Class ;
    rdfs:label "Document Reference"@en ;
    rdfs:comment """Reference to an external document such as reports, certificates,
manuals, or guides. Supports multiple languages and formats.
See also gs1:ReferencedFileDetails for GS1 Web Vocabulary equivalent."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso gs1:ReferencedFileDetails ;
    rdfs:seeAlso foaf:Document ;
    rdfs:seeAlso cirpass2:DigitalInstruction ;
    skos:closeMatch gs1:ReferencedFileDetails ;
    skos:note """PREFER gs1:ReferencedFileDetails where possible. This class provides equivalent
functionality with additional ESPR-specific document types. Use gs1:referencedFile
property with gs1:ReferencedFileDetails for standard documents (manuals, certificates).
Use oec:DocumentReference only when ESPR-specific document types are required."""@en ;
    skos:broadMatch schema:APIReference ;
    skos:broadMatch foaf:Document ;
    skos:broadMatch schema:NoteDigitalDocument .

oec:RecycledContent
    a rdfs:Class ;
    rdfs:label "Recycled Content"@en ;
    rdfs:comment """Declaration of recycled material content with pre-consumer
and post-consumer splits."""@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note """Required extension: GS1 Web Vocabulary does not provide structured recycled content
properties. ESPR and Battery Regulation require pre-consumer/post-consumer breakdown which is
not available in GS1 vocabulary. Aligned with GDSN sustainability attributes."""@en ;
    rdfs:seeAlso cirpass2:RecycledMaterialsUse ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf>;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#RecycledContentEntity> ;
    rdfs:seeAlso gs1:PackagingDetails .

oec:MaterialComposition
    a rdfs:Class ;
    rdfs:label "Material Composition"@en ;
    rdfs:comment """Material composition information including source country,
percentage, and critical raw material classification."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso gs1:TextileMaterialDetails ;
    rdfs:seeAlso gs1:PackagingMaterialDetails ;
    skos:note """Required extension: GS1 provides gs1:TextileMaterialDetails and
gs1:PackagingMaterialDetails for specific domains but lacks a generic material composition
class with CAS/EC number support and critical raw material flags required by ESPR."""@en;
    skos:narrowMatch gs1:TextileMaterialDetails ;
    skos:narrowMatch gs1:PackagingMaterialDetails ;
    rdfs:seeAlso cirpass2:MaterialOfComposition .

oec:FacilityInformation
    a rdfs:Class ;
    rdfs:label "Facility Information"@en ;
    rdfs:comment """Manufacturing or processing facility information per ESPR.
Captures facility identification, location, and certification data.
Use gs1:globalLocationNumber for facility identification, schema:name for facility name, gs1:address for location (all inherited from gs1:Place).
Use GS1 Digital Link format: https://id.gs1.org/414/{GLN}"""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:subClassOf gs1:Place ;
    rdfs:seeAlso gs1:Place ;
    rdfs:seeAlso schema:Place ;
    rdfs:seeAlso untp:Facility ;
    rdfs:seeAlso locn:Location ;
    rdfs:seeAlso locn:Address ;
    rdfs:seeAlso locn:Geometry ;
    rdfs:seeAlso cirpass2:Facility ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note """Extension of gs1:Place to capture ESPR-specific facility requirements.
Use gs1:globalLocationNumber for facility GLN identification, schema:name for facility name, gs1:address for location.
GS1 provides gs1:Place but lacks facility certification and type properties required by ESPR.
Aligned with UNTP Facility for Digital Facility Record (DFR) interoperability.
Anchored to locn:Location (EU SEMICeu Core Location Vocabulary, http://www.w3.org/ns/locn#)
for EU-portal interoperability: locn:Address and locn:Geometry are the canonical
sub-structures for the address and geographic-coordinate parts."""@en ;
    skos:broadMatch schema:Place ;
    skos:broadMatch gs1:Place ;
    rdfs:seeAlso cv:InformationConcept ;
    skos:broadMatch gs1:Organization .

oec:SubstanceOfConcern
    a rdfs:Class ;
    rdfs:label "Substance of Concern"@en ;
    rdfs:comment """Substances of concern declaration aligned with SCIP database
and ESPR requirements. Extends HazardousSubstance for detailed tracking."""@en ;
    rdfs:subClassOf oec:HazardousSubstance ;
    dcterms:source <https://echa.europa.eu/scip> ;
    rdfs:seeAlso <https://echa.europa.eu/scip-database> ;
    rdfs:seeAlso cirpass2:SubstanceOfConcern ;
    skos:note """Required extension: SCIP database integration requires specific fields (SCIP ID,
EC Number, safe use instructions) not available in GS1 Web Vocabulary. Supports REACH Article 33
and Waste Framework Directive requirements."""@en;
    skos:broadMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#HazardousSubstanceEntity> ;
    skos:broadMatch schema:ChemicalSubstance ;
    skos:broadMatch schema:Substance ;
    skos:broadMatch <https://w3id.org/eudpp#Substance> .

oec:PerformanceInfo
    a rdfs:Class ;
    rdfs:label "Performance Information"@en ;
    rdfs:comment """Product performance and durability information per ESPR Article 7.
Captures expected lifespan, usage cycles, and performance metrics."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso gs1:manufacturersWarranty ;
    rdfs:seeAlso cirpass2:Durability ;
    rdfs:seeAlso cirpass2:Reliability ;
    skos:note """Required extension: GS1 provides gs1:manufacturersWarranty for warranty information but lacks
structured performance and durability data (expected lifespan, usage cycles, performance class)
required by ESPR Article 7. Use in conjunction with gs1:manufacturersWarranty where applicable."""@en ;
    rdfs:seeAlso untp:PerformanceMetric .

oec:RepairabilityInfo
    a rdfs:Class ;
    rdfs:label "Repairability Information"@en ;
    rdfs:comment """Repair and maintenance information per ESPR Article 7.
Captures repair scores, spare part availability, and repair instructions."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso gs1:manufacturersWarranty ;
    rdfs:seeAlso gs1:referencedFile ;
    rdfs:seeAlso cirpass2:Reliability ;
    rdfs:seeAlso cirpass2:Durability ;
    skos:note """Required extension: ESPR Article 7 mandates repairability scores (French Indice de
Réparabilité style), spare parts availability periods, and DIY repair information not available
in GS1 Web Vocabulary. Use gs1:referencedFile for repair manuals."""@en .

oec:AccessRights
    a rdfs:Class ;
    rdfs:label "Access Rights"@en ;
    rdfs:comment """Access control for DPP data per ESPR Article 9.
Defines which data is publicly accessible vs. restricted to authorized parties."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note """Required extension: ESPR Article 9 defines three access levels (Public, Authorized,
Restricted) for DPP data. GS1 Web Vocabulary does not provide access control semantics.
This supports the ESPR requirement for tiered data access."""@en .

oec:EmissionsPerformance
    a rdfs:Class ;
    rdfs:label "Emissions Performance"@en ;
    rdfs:comment """Container for greenhouse gas emissions data including carbon footprint,
lifecycle phases, and verification status. Aligned with UNTP EmissionsPerformance."""@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso cirpass2:CarbonFootprint ;
    rdfs:seeAlso cirpass2:EnvironmentalFootprint ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf> ;
    skos:note """Required extension: Structured emissions performance data for ESPR requirements.
Aligned with UNTP EmissionsPerformance for interoperability. Extends the GDSN CFP pattern
with operational scope and verification metrics."""@en ;
    skos:narrowMatch <https://w3id.org/eudpp#CarbonFootprint> .

oec:TraceabilityPerformance
    a rdfs:Class ;
    rdfs:label "Traceability Performance"@en ;
    rdfs:comment """Supply chain verification and traceability metrics indicating the proportion
of materials that are verifiably traced through the supply chain."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note """Required extension: ESPR and due diligence regulations require traceability metrics.
Aligned with UNTP TraceabilityPerformance for supply chain transparency reporting."""@en;
    rdfs:seeAlso untp:PerformanceMetric ;
    skos:broadMatch <https://w3id.org/eudpp#QuantitativeProperty> .

# =============================================================================
# Operator Role Enumeration
# =============================================================================

oec:OperatorRole
    a rdfs:Class ;
    rdfs:label "Operator Role"@en ;
    rdfs:comment "Role of an economic operator in the supply chain."@en ;
    rdfs:seeAlso cirpass2:EconomicOperatorRole ;
    owl:oneOf (oec:Manufacturer oec:Importer oec:Distributor oec:Processor oec:Trader) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso schema:OrganizationRole  .

oec:Manufacturer a oec:OperatorRole ; rdfs:label "Manufacturer"@en ;
    rdfs:comment "Entity that produces the product, including own-brand labellers per EU Market Surveillance Regulation 2019/1020."@en .
oec:Importer a oec:OperatorRole ; rdfs:label "Importer"@en ;
    rdfs:comment "Entity established in the EU that places a product from a third country on the Union market."@en .
oec:Distributor a oec:OperatorRole ; rdfs:label "Distributor"@en ;
    rdfs:comment "Entity in the supply chain that makes a product available on the market, other than manufacturer or importer."@en .
oec:Processor a oec:OperatorRole ; rdfs:label "Processor"@en ;
    rdfs:comment "Entity that processes raw materials or components into finished or intermediate products."@en .
oec:Trader a oec:OperatorRole ; rdfs:label "Trader"@en ;
    rdfs:comment "Entity that buys and sells products without significant modification or processing."@en .
oec:AuthorisedRepresentative a oec:OperatorRole ; rdfs:label "Authorised Representative"@en ;
    rdfs:comment "Entity authorised by manufacturer to act on their behalf for specific tasks (per ESPR Article 16)."@en ;
    rdfs:seeAlso cirpass2:AuthorisedRepresentativeRoleAssignment ;
    rdfs:seeAlso cirpass2:hasAuthorisedRepresentative .
oec:FulfilmentServiceProvider a oec:OperatorRole ; rdfs:label "Fulfilment Service Provider"@en ;
    rdfs:comment "Entity providing fulfilment services including warehousing and order processing (per ESPR Article 17)."@en .

# =============================================================================
# Access Level Enumeration (ESPR Article 9)
# =============================================================================

oec:AccessLevel
    a rdfs:Class ;
    rdfs:label "Access Level"@en ;
    rdfs:comment "Access levels for DPP data per ESPR Article 9."@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    owl:oneOf (oec:Public oec:AuthorizedOnly oec:Restricted) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:Public a oec:AccessLevel ; rdfs:label "Public"@en ;
    rdfs:comment "Data accessible to all users (consumers, market surveillance, customs). Per ESPR Article 9(1)."@en .
oec:AuthorizedOnly a oec:AccessLevel ; rdfs:label "Authorized Only"@en ;
    rdfs:comment "Data accessible only to market surveillance authorities and customs. Per ESPR Article 9(2)."@en .
oec:Restricted a oec:AccessLevel ; rdfs:label "Restricted"@en ;
    rdfs:comment "Data accessible only to specific authorized economic operators. Per ESPR Article 9(3)."@en .

oec:defaultAccessLevel
    a owl:AnnotationProperty ;
    rdfs:label "default access level"@en ;
    rdfs:comment """Default ESPR Article 9 access tier for values of the annotated property in
DPP / master-data documents (Public, AuthorizedOnly, Restricted). Deployments may tighten a
field's tier at runtime but never loosen it below this default. Properties without this
annotation default to AuthorizedOnly (fail-closed toward the public)."""@en ;
    rdfs:range oec:AccessLevel ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note """Field-level counterpart of oec:hasAccessLevel: while oec:hasAccessLevel classifies a
document instance via its AccessRights object, oec:defaultAccessLevel classifies the property
definition itself. Generators carry it into JSON Schemas as x-access-level and into the
vocabulary browser JSON as accessLevel."""@en .

oec:accessLevelMandatedBy
    a owl:AnnotationProperty ;
    rdfs:label "access level mandated by"@en ;
    rdfs:comment """Legal act that fixes the access tier of the annotated property. Presence of
this annotation makes the oec:defaultAccessLevel non-overridable at runtime (locked in both
directions)."""@en ;
    rdfs:range rdfs:Resource ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

oec:accessLevelRationale
    a owl:AnnotationProperty ;
    rdfs:label "access level rationale"@en ;
    rdfs:comment """One-sentence justification for the annotated property's
oec:defaultAccessLevel — why this tier, in terms a reviewer or auditor can check
against the underlying regulation. REQUIRED wherever oec:defaultAccessLevel is
set (enforced by check-access-levels). Rendered on ref.openepcis.io term pages
and in the DDM field-access matrix."""@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:accessLevelSource
    a owl:AnnotationProperty ;
    rdfs:label "access level source"@en ;
    rdfs:comment """Legal act or article that GROUNDS the tier decision (citation).
Unlike oec:accessLevelMandatedBy it does NOT lock the tier — it documents where
the default came from. Use an ELI/CELEX IRI, as specific as available."""@en ;
    rdfs:range rdfs:Resource ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:accessLevelInherited
    a owl:AnnotationProperty ;
    rdfs:label "access level inherited"@en ;
    rdfs:comment """Marks a structural value-carrier sub-property (value, unit,
document URL, ...) that has NO tier of its own: at runtime its visibility is
governed entirely by the embedding parent property's tier. Declaring it keeps
the vocabulary 100% explicitly classified (the completeness guard accepts
accessLevelInherited in lieu of defaultAccessLevel) without inventing a fake
tier, and keeps such terms out of the enforcement alias map."""@en ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

# =============================================================================
# Passport Status (EN 18223 dppStatus; EN 18222 lifecycle management)
# =============================================================================
# EN 18223:2026 (4.1.2.1, Table 1) types dppStatus as a String with example
# values active/inactive/archived/invalid, extensible "by relevant legal acts".
# EPCIS4DPP uses those four as the base set plus profile extensions, expressed
# as the lowercase string tokens in skos:notation. This class is informative;
# the value carried in a DPP instance is the string token.

oec:PassportStatus
    a rdfs:Class ;
    rdfs:label "Passport Status"@en ;
    rdfs:comment "Lifecycle status of a Digital Product Passport (EN 18223 dppStatus). Values are the lowercase string tokens given by skos:notation."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    skos:note "Base values active/inactive/archived/invalid per EN 18223 Table 1; draft/withdrawn/suspended are EPCIS4DPP profile extensions permitted by 'further values by relevant legal acts'."@en ;
    owl:oneOf (oec:Active oec:Inactive oec:Archived oec:Invalid oec:Draft oec:Withdrawn oec:Suspended) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch schema:StatusEnumeration ;
    rdfs:seeAlso cirpass2:dppStatus .

oec:Active a oec:PassportStatus ; rdfs:label "Active"@en ; skos:notation "active" ;
    rdfs:comment "Passport is published and represents the current state of the product."@en ;
    rdfs:seeAlso cbv:Disp-active .
oec:Inactive a oec:PassportStatus ; rdfs:label "Inactive"@en ; skos:notation "inactive" ;
    rdfs:comment "Passport is not currently in force (EN 18223 base value)."@en .
oec:Archived a oec:PassportStatus ; rdfs:label "Archived"@en ; skos:notation "archived" ;
    rdfs:comment "Passport is archived after product end-of-life. Data persisted per EN 18221."@en .
oec:Invalid a oec:PassportStatus ; rdfs:label "Invalid"@en ; skos:notation "invalid" ;
    rdfs:comment "Passport is no longer valid (EN 18223 base value, e.g. revoked)."@en .
oec:Draft a oec:PassportStatus ; rdfs:label "Draft"@en ; skos:notation "draft" ;
    rdfs:comment "EPCIS4DPP extension: passport is being prepared and not yet publicly available."@en .
oec:Withdrawn a oec:PassportStatus ; rdfs:label "Withdrawn"@en ; skos:notation "withdrawn" ;
    rdfs:comment "EPCIS4DPP extension: passport withdrawn (e.g. product recall); a specific kind of invalid."@en ;
    rdfs:seeAlso cbv:Disp-recalled .
oec:Suspended a oec:PassportStatus ; rdfs:label "Suspended"@en ; skos:notation "suspended" ;
    rdfs:comment "EPCIS4DPP extension: temporarily not in force (e.g. pending investigation); a specific kind of inactive."@en .

# =============================================================================
# CBV business-step / disposition extensions (EPCIS 2.0 user vocabulary)
# =============================================================================
# CBV 2.0 publishes 41 bizStep and 33 disposition values; three values the DPP
# flows need are not among them. EPCIS 2.0 allows both fields to carry a URI from
# a user vocabulary, so they are minted here instead of being forced onto an
# unrelated CBV value: cbv:BizStep-other would erase the distinction, and a bare
# token ("bizStep": "notifying") is not a CBV term, so it expands to a relative
# IRI and is silently dropped. Event data writes them as CURIEs:
#     "bizStep": "oec:BizStep-notifying"
#     "persistentDisposition": { "set": ["oec:Disp-subject_to_regulation"] }

oec:BizStep-notifying
    a cbv:BizStep ;
    rdfs:label "Notifying"@en ;
    rdfs:comment "Submitting a regulatory notification, declaration or statement about the product to a competent authority — an EUDR due-diligence or exemption declaration, a Battery Regulation notification, an ESPR conformity notification."@en ;
    skos:notation "notifying" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2023/1115> ;
    skos:note "CBV 2.0 publishes no business step for reporting to an authority; its 41 values cover physical and commercial handling only, and cbv:BizStep-other would drop the distinction. Carried by at least two regulation modules (EUDR declarations, Battery Regulation notifications), so it belongs in the DPP core rather than one module."@en ;
    rdfs:seeAlso cbv:BizStep-inspecting ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:BizStep-recovery
    a cbv:BizStep ;
    rdfs:label "Recovery"@en ;
    rdfs:comment "Recovering material or energy from a product at end of life, e.g. reprocessing collected packaging into secondary raw material."@en ;
    skos:notation "recovery" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2025/40> ;
    skos:note "CBV 2.0 has no recovery or recycling business step: cbv:BizStep-destroying and cbv:BizStep-disassembling describe different operations and would misstate the process. Cross-regulation (PPWR material recovery, Battery Regulation recycling, WEEE treatment), so DPP core rather than a module."@en ;
    rdfs:seeAlso cbv:BizStep-destroying ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:BizStep-maintaining
    a cbv:BizStep ;
    rdfs:label "Maintaining"@en ;
    rdfs:comment "Actions (one or more) taken to keep a product in a condition where it can fulfil its intended purpose (ESPR Art. 2(19))."@en ;
    skos:notation "maintaining" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "CBV 2.0 (verified against the live vocabulary 2026-08-06) has no maintenance business step: cbv:BizStep-inspecting is examination without intervention, cbv:BizStep-repairing presupposes a defect, while ESPR maintenance is preventive. ESPR is horizontal, so DPP core rather than a module. CIRPASS-2's EUDPP EVENT module wraps the same Art. 2(19) definition in an event class (cirpass2:MaintenanceEvent); modelled here as CBV vocabulary because the definition describes an activity, not an event."@en ;
    rdfs:seeAlso cbv:BizStep-inspecting ;
    rdfs:seeAlso cirpass2:MaintenanceEvent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:BizStep-refurbishing
    a cbv:BizStep ;
    rdfs:label "Refurbishing"@en ;
    rdfs:comment "Actions carried out to prepare, clean, test, service and, where necessary, repair a product or a discarded product in order to restore its performance or functionality within the intended use and range of performance originally conceived at the design stage (ESPR Art. 2(18))."@en ;
    skos:notation "refurbishing" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "CBV 2.0 (verified 2026-08-06) has no refurbishing business step: cbv:BizStep-repairing covers returning a defective product to service, while refurbishment restores performance of a possibly non-defective or discarded product within its original design envelope. Cross-regulation (ESPR horizontal, Battery Regulation Art. 2(26)), so DPP core. CIRPASS-2 wraps the same Art. 2(18) definition in cirpass2:RefurbishmentEvent."@en ;
    rdfs:seeAlso cbv:BizStep-repairing ;
    rdfs:seeAlso cirpass2:RefurbishmentEvent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:BizStep-remanufacturing
    a cbv:BizStep ;
    rdfs:label "Remanufacturing"@en ;
    rdfs:comment "Actions through which a new product is produced from objects that are waste, products or components and through which at least one change is made that substantially affects the safety, performance, purpose or type of the product (ESPR Art. 2(16))."@en ;
    skos:notation "remanufacturing" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "CBV 2.0 (verified 2026-08-06) has no remanufacturing business step. Belongs on an EPCIS TransformationEvent, not an ObjectEvent: per the ESPR definition remanufacturing produces a NEW product from waste/components, so the output carries a new identity (input/output EPC lists), which an event-class taxonomy like cirpass2:RemanufacturingEvent (subclass of ProductEvent) cannot express. ESPR horizontal, so DPP core."@en ;
    rdfs:seeAlso cbv:BizStep-commissioning ;
    rdfs:seeAlso cirpass2:RemanufacturingEvent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:BizStep-upgrading
    a cbv:BizStep ;
    rdfs:label "Upgrading"@en ;
    rdfs:comment "Actions carried out to enhance the functionality, performance, capacity, safety or aesthetics of a product (ESPR Art. 2(17))."@en ;
    skos:notation "upgrading" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "CBV 2.0 (verified 2026-08-06) has no upgrading business step: cbv:BizStep-repairing restores intended function, while upgrading enhances beyond the original state. ESPR horizontal, so DPP core. CIRPASS-2 wraps the same Art. 2(17) definition in cirpass2:UpgradingEvent."@en ;
    rdfs:seeAlso cbv:BizStep-repairing ;
    rdfs:seeAlso cirpass2:UpgradingEvent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:Disp-subject_to_regulation
    a cbv:Disp ;
    rdfs:label "Subject to regulation"@en ;
    rdfs:comment "The item is within the scope of a product regulation and carries the corresponding obligations (e.g. an EUDR-relevant commodity). Set as a persistentDisposition so it travels with the item across events."@en ;
    skos:notation "subject_to_regulation" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2023/1115> ;
    skos:note "CBV 2.0's 33 dispositions describe physical/commercial state (active, in_transit, recalled, …); none expresses regulatory scope. Carried by the EUDR declaration events and applicable to any regulation module, so DPP core rather than a module."@en ;
    rdfs:seeAlso cbv:Disp-conformant ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:Disp-available_on_market
    a cbv:Disp ;
    rdfs:label "Available on the market"@en ;
    rdfs:comment "The product is supplied for distribution, consumption or use on the Union market in the course of a commercial activity (ESPR Art. 2(39)). Set as a persistentDisposition so the market status travels with the item across events; the event that first sets it records the placing on the market (Art. 2(40))."@en ;
    skos:notation "available_on_market" ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "CBV 2.0 (verified 2026-08-06) has no market-status disposition. Making available / placing on the market are legal acts, not observable operations: modelled as a persistent state rather than a business step, because 'is on the Union market' persists across subsequent events while the act itself coincides with an ordinary shipping or selling event. CIRPASS-2 wraps the same definitions in cirpass2:MakingAvailableOnMarketEvent / cirpass2:PlacingOnMarketEvent."@en ;
    rdfs:seeAlso cbv:Disp-active ;
    rdfs:seeAlso cirpass2:MakingAvailableOnMarketEvent ;
    rdfs:seeAlso cirpass2:PlacingOnMarketEvent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

# =============================================================================
# DPP Granularity Enumeration (JTC-24 / BatteryPass-Ready v1.3)
# =============================================================================

oec:DPPGranularity
    a rdfs:Class ;
    rdfs:label "DPP Granularity"@en ;
    rdfs:comment "Reporting granularity of a Digital Product Passport: which level of the product hierarchy a given attribute set describes."@en ;
    dcterms:source <https://thebatterypass.eu/battery-pass-ready/publications/> ;
    skos:note "Introduced by BatteryPass-Ready Data Attribute Longlist v1.3 (March 2026) to align EU Battery Passport reporting with CEN/CENELEC JTC-24 drafts. Some attributes (e.g. recycled-content shares, carbon-footprint label) are reported at batch level, others at model or item level."@en ;
    owl:oneOf (oec:ModelLevel oec:BatchLevel oec:ItemLevel) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:ModelLevel a oec:DPPGranularity ; rdfs:label "Battery model"@en ;
    rdfs:comment "Attribute reported once per battery model (e.g. nominal voltage, expected cycle life). Model master data has a single source of truth: the same model built at different manufacturing sites is NOT a distinct granularity level. Site is a source/location dimension carried by EPCIS events (readPoint / bizLocation); facts that vary per production run are reported at BatchLevel."@en .
oec:BatchLevel a oec:DPPGranularity ; rdfs:label "Battery model per calendar year and per manufacturing site (batch)"@en ;
    rdfs:comment "Attribute reported per batch: model, calendar year, manufacturing site (e.g. carbon footprint, recycled-content shares)."@en .
oec:ItemLevel a oec:DPPGranularity ; rdfs:label "Individual battery item"@en ;
    rdfs:comment "Attribute reported per individual serial-numbered battery (e.g. serial number, state of health, cycle count)."@en .

# =============================================================================
# Properties - DPP Information (BatteryPass-Ready v1.3 / JTC-24)
# =============================================================================
#
# Cross-cutting attributes describing the DPP document itself, separate from
# the product's substantive data. Required by the BatteryPass-Ready v1.3
# longlist (#1-#4) but applicable to every DPP regulation.

oec:hasReportingGranularity
    a owl:ObjectProperty ;
    rdfs:label "Reporting Granularity"@en ;
    rdfs:comment "BatteryPass per-attribute reporting granularity (model / model-per-site / batch / item). Distinct from the passport-level EN 18223 'granularity' (oec:granularityLevel)."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:DPPGranularity ;
    dcterms:source <https://thebatterypass.eu/battery-pass-ready/publications/> ;
    skos:note "BatteryPass-Ready v1.3 longlist attribute #3. Renamed from oec:granularity to free the 'granularity' key for the EN 18223 passport-level attribute (oec:granularityLevel)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:closeMatch dppk:granularity .

oec:lastUpdated
    a owl:DatatypeProperty ;
    rdfs:label "Last Updated"@en ;
    rdfs:comment "Date and time of the latest update to the DPP instance (EN 18223 lastUpdated), UTC, ISO 8601."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:dateTime ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    skos:note "Consolidates the former oec:lastUpdate (BatteryPass-Ready v1.3 #4) and oec:passportLastModified into the EN 18223 'lastUpdated' attribute."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:closeMatch <urn:samm:io.BatteryPass.Performance:1.2.1#lastUpdate> ;
    skos:exactMatch <https://w3id.org/eudpp#lastUpdate> .

# =============================================================================
# ESPR Product Category Enumeration (Priority Sectors)
# =============================================================================

oec:ProductCategory
    a rdfs:Class ;
    rdfs:label "Product Category"@en ;
    rdfs:comment "ESPR priority product categories per Annex I and delegated acts."@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    owl:oneOf (
        oec:Batteries
        oec:Textiles
        oec:Electronics
        oec:Furniture
        oec:Tyres
        oec:ConstructionProducts
        oec:Chemicals
        oec:Detergents
        oec:Packaging
        oec:FoodContact
        oec:IronSteel
        oec:Aluminium
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso gs1:Product ;
    skos:broadMatch schema:CategoryCode ;
    rdfs:seeAlso schema:Product ;
    rdfs:seeAlso gs1:FoodBeverageTobaccoProduct ;
    rdfs:seeAlso dppk:BatteryProduct .

oec:Batteries a oec:ProductCategory ; rdfs:label "Batteries"@en ;
    rdfs:comment "Batteries and accumulators per EU Battery Regulation 2023/1542."@en .
oec:Textiles a oec:ProductCategory ; rdfs:label "Textiles"@en ;
    rdfs:comment "Textile products including apparel, footwear, and home textiles."@en .
oec:Electronics a oec:ProductCategory ; rdfs:label "Electronics"@en ;
    rdfs:comment "Electronic and electrical equipment including ICT and consumer electronics."@en .
oec:Furniture a oec:ProductCategory ; rdfs:label "Furniture"@en ;
    rdfs:comment "Furniture products including domestic and office furniture."@en .
oec:Tyres a oec:ProductCategory ; rdfs:label "Tyres"@en ;
    rdfs:comment "Tyres for motor vehicles and their trailers."@en .
oec:ConstructionProducts a oec:ProductCategory ; rdfs:label "Construction Products"@en ;
    rdfs:comment "Construction products per Construction Products Regulation."@en .
oec:Chemicals a oec:ProductCategory ; rdfs:label "Chemicals"@en ;
    rdfs:comment "Chemical substances and mixtures."@en .
oec:Detergents a oec:ProductCategory ; rdfs:label "Detergents"@en ;
    rdfs:comment "Detergents and surfactants per the EU Detergents Regulation (EU) 2026/405, an ESPR priority product category."@en ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32026R0405> ;
    rdfs:seeAlso gs1:RegulationTypeCode-DETERGENTS_SAFETY_REGULATION .
oec:Packaging a oec:ProductCategory ; rdfs:label "Packaging"@en ;
    rdfs:comment "Packaging and packaging waste products."@en .
oec:FoodContact a oec:ProductCategory ; rdfs:label "Food Contact Materials"@en ;
    rdfs:comment "Materials and articles intended for food contact."@en .
oec:IronSteel a oec:ProductCategory ; rdfs:label "Iron and Steel"@en ;
    rdfs:comment "Iron and steel intermediate products."@en .
oec:Aluminium a oec:ProductCategory ; rdfs:label "Aluminium"@en ;
    rdfs:comment "Aluminium intermediate products."@en .

# =============================================================================
# Hazard Class Enumeration (EU CLP Regulation 1272/2008)
# =============================================================================

oec:HazardClass
    a rdfs:Class ;
    rdfs:label "Hazard Class"@en ;
    rdfs:comment "Hazard classification categories per EU CLP Regulation."@en ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    owl:oneOf (
        oec:AcuteToxicity
        oec:SkinCorrosionOrIrritation
        oec:EyeDamageOrIrritation
        oec:RespiratoryOrSkinSensitization
        oec:GermCellMutagenicity
        oec:Carcinogenicity
        oec:ReproductiveToxicity
        oec:SpecificTargetOrganToxicity
        oec:AspirationHazard
        oec:HazardousToAquaticEnvironment
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:AcuteToxicity a oec:HazardClass ; rdfs:label "Acute Toxicity"@en ;
    rdfs:comment "Substances causing harmful effects after single or short-term exposure via oral, dermal, or inhalation routes."@en .
oec:SkinCorrosionOrIrritation a oec:HazardClass ; rdfs:label "Skin Corrosion or Irritation"@en ;
    rdfs:comment "Substances causing irreversible damage (corrosion) or reversible damage (irritation) to skin tissue."@en .
oec:EyeDamageOrIrritation a oec:HazardClass ; rdfs:label "Eye Damage or Irritation"@en ;
    rdfs:comment "Substances causing serious eye damage or reversible eye irritation upon contact."@en .
oec:RespiratoryOrSkinSensitization a oec:HazardClass ; rdfs:label "Respiratory or Skin Sensitization"@en ;
    rdfs:comment "Substances causing hypersensitivity of airways (asthma) or allergic skin reactions after exposure."@en .
oec:GermCellMutagenicity a oec:HazardClass ; rdfs:label "Germ Cell Mutagenicity"@en ;
    rdfs:comment "Substances that may cause heritable genetic mutations in human germ cells."@en .
oec:Carcinogenicity a oec:HazardClass ; rdfs:label "Carcinogenicity"@en ;
    rdfs:comment "Substances known or suspected to cause cancer in humans."@en .
oec:ReproductiveToxicity a oec:HazardClass ; rdfs:label "Reproductive Toxicity"@en ;
    rdfs:comment "Substances adversely affecting sexual function, fertility, or development of offspring."@en .
oec:SpecificTargetOrganToxicity a oec:HazardClass ; rdfs:label "Specific Target Organ Toxicity"@en ;
    rdfs:comment "Substances causing non-lethal damage to specific organs after single or repeated exposure."@en .
oec:AspirationHazard a oec:HazardClass ; rdfs:label "Aspiration Hazard"@en ;
    rdfs:comment "Liquid or solid substances causing chemical pneumonia or pulmonary injury if aspirated into airways."@en .
oec:HazardousToAquaticEnvironment a oec:HazardClass ; rdfs:label "Hazardous to Aquatic Environment"@en ;
    rdfs:comment "Substances posing acute or chronic toxicity risks to aquatic organisms and ecosystems."@en .

# =============================================================================
# Document Type Enumeration
# =============================================================================

oec:DocumentType
    a rdfs:Class ;
    rdfs:label "Document Type"@en ;
    rdfs:comment """Types of supporting documents for DPP.
See also gs1:ReferencedFileTypeCode for GS1 standard document types (PRODUCT_MANUAL, SAFETY_DATA_SHEET, CERTIFICATE, etc.)."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso gs1:ReferencedFileTypeCode ;
    owl:oneOf (
        oec:DueDiligenceDocument
        oec:Certificate
        oec:TestReport
        oec:Manual
        oec:DeclarationOfConformity
        oec:SafetyDataSheet
        oec:EnvironmentalReport
        oec:ThirdPartyVerification
    ) ;
    rdfs:seeAlso schema:SpreadsheetDigitalDocument ;
    skos:closeMatch gs1:ReferencedFileTypeCode .

oec:DueDiligenceDocument a oec:DocumentType ; rdfs:label "Due Diligence Document"@en ;
    rdfs:comment "Documentation of supply chain due diligence processes and risk assessments."@en .
oec:Certificate a oec:DocumentType ; rdfs:label "Certificate"@en ;
    rdfs:comment "Official certificate from accredited body (ISO, environmental, quality certifications)."@en ;
    rdfs:seeAlso cirpass2:ConformityCertificate .
oec:TestReport a oec:DocumentType ; rdfs:label "Test Report"@en ;
    rdfs:comment "Technical test results from accredited laboratory or testing facility."@en .
oec:Manual a oec:DocumentType ; rdfs:label "Manual"@en ;
    rdfs:comment "User manual, installation guide, or maintenance documentation."@en .
oec:DeclarationOfConformity a oec:DocumentType ; rdfs:label "Declaration of Conformity"@en ;
    rdfs:comment "EU Declaration of Conformity stating compliance with applicable EU legislation."@en ;
    rdfs:seeAlso cirpass2:EUDeclarationOfConformity .
oec:SafetyDataSheet a oec:DocumentType ; rdfs:label "Safety Data Sheet"@en ;
    rdfs:comment "Safety Data Sheet (SDS) per REACH Regulation providing hazard information."@en .
oec:EnvironmentalReport a oec:DocumentType ; rdfs:label "Environmental Report"@en ;
    rdfs:comment "Environmental impact assessment, carbon footprint study, or LCA report."@en .
oec:ThirdPartyVerification a oec:DocumentType ; rdfs:label "Third Party Verification"@en ;
    rdfs:comment "Independent verification report from accredited third-party auditor."@en ;
    rdfs:seeAlso cirpass2:Review ;
    rdfs:seeAlso cirpass2:ReviewReport .

# =============================================================================
# Conformity framework (New Legislative Framework / ESPR Chapter IX)
# =============================================================================

oec:UnionHarmonisationLegislation
    a rdfs:Class ;
    rdfs:label "Union Harmonisation Legislation"@en ;
    rdfs:comment "EU legal act harmonising the conditions for the marketing of products, against which conformity is declared (e.g. the ESPR itself, a delegated act, the Battery Regulation)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/dec/2008/768(1)> ;
    skos:note "New Legislative Framework concept (Decision 768/2008/EC); every EU declaration of conformity cites the harmonisation legislation it answers. CCCEV's cccev:ReferenceFramework is the SEMICeu generalisation covering any legislation or standard a requirement derives from; this class is the harmonisation-legislation specialisation."@en ;
    skos:broadMatch cccev:ReferenceFramework ;
    rdfs:seeAlso cirpass2:UnionHarmonisationLegislation ;
    rdfs:seeAlso oec:RegulationTypeCode ;
    skos:exactMatch <https://w3id.org/eudpp#UnionHarmonisationLegislation> ;
    skos:broadMatch schema:Legislation .

oec:assignedELI
    a owl:DatatypeProperty ;
    rdfs:label "Assigned ELI"@en ;
    rdfs:comment "European Legislation Identifier (ELI) of the legal act, as an HTTP URI on eur-lex (e.g. https://eur-lex.europa.eu/eli/reg/2024/1781/oj)."@en ;
    rdfs:domain oec:UnionHarmonisationLegislation ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/ontology> ;
    skos:note "The ELI ontology models legal resources as eli:LegalResource nodes; this property carries the identifier as a plain URI reference, which is the shape passports exchange. Property-to-class, so referenced by rdfs:seeAlso rather than a graded mapping."@en ;
    rdfs:seeAlso <http://data.europa.eu/eli/ontology#LegalResource> ;
    rdfs:seeAlso cirpass2:assignedELI ;
    skos:exactMatch <https://w3id.org/eudpp#assignedELI> .

oec:HarmonisedStandard
    a rdfs:Class ;
    rdfs:label "Harmonised Standard"@en ;
    rdfs:comment "European standard adopted on the basis of a Commission standardisation request whose application confers presumption of conformity (Regulation (EU) 1025/2012 Art. 2(1)(c))."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2012/1025> ;
    skos:note "ESPR Chapter IX: applying a cited harmonised standard gives presumption of conformity with the covered requirements. Distinct from oec:Certificate (an attestation about one product) and from the legislation itself."@en ;
    skos:broadMatch cccev:ReferenceFramework ;
    rdfs:seeAlso cirpass2:HarmonisedStandard ;
    rdfs:seeAlso cirpass2:usedForPresumptionOfConformity ;
    skos:exactMatch <https://w3id.org/eudpp#HarmonisedStandard> .

oec:CommonSpecification
    a rdfs:Class ;
    rdfs:label "Common Specification"@en ;
    rdfs:comment "Technical specification adopted by Commission implementing act as a fallback route to presumption of conformity where no adequate harmonised standard exists (ESPR Art. 41)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Art. 41 fallback instrument; same presumption-of-conformity role as a harmonised standard but adopted by the Commission instead of a standardisation body."@en ;
    skos:broadMatch cccev:ReferenceFramework ;
    rdfs:seeAlso oec:HarmonisedStandard ;
    rdfs:seeAlso cirpass2:CommonSpecification ;
    skos:broadMatch <https://w3id.org/eudpp#TechnicalSpecification> .

oec:ConformityAssessmentModule
    a rdfs:Class ;
    rdfs:label "Conformity Assessment Module"@en ;
    rdfs:comment "Conformity assessment procedure module per Decision 768/2008/EC Annex II, cited by the applicable Union harmonisation legislation (ESPR Art. 4/43 delegated acts choose the module)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/dec/2008/768(1)> ;
    skos:note "New Legislative Framework module taxonomy (A through H1). Modelled like oec:ImpactIndicatorType: a class whose individuals form the controlled list. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso cirpass2:ConformityAssessmentModule ;
    rdfs:seeAlso cirpass2:allowsConformityAssessmentModule ;
    skos:exactMatch <https://w3id.org/eudpp#ConformityAssessmentModule> .

oec:ModuleA  a oec:ConformityAssessmentModule ; rdfs:label "Module A — Internal production control"@en ; skos:notation "A" .
oec:ModuleA1 a oec:ConformityAssessmentModule ; rdfs:label "Module A1 — Internal production control plus supervised product testing"@en ; skos:notation "A1" .
oec:ModuleA2 a oec:ConformityAssessmentModule ; rdfs:label "Module A2 — Internal production control plus supervised product checks at random intervals"@en ; skos:notation "A2" .
oec:ModuleB  a oec:ConformityAssessmentModule ; rdfs:label "Module B — EU-type examination"@en ; skos:notation "B" .
oec:ModuleC  a oec:ConformityAssessmentModule ; rdfs:label "Module C — Conformity to type based on internal production control"@en ; skos:notation "C" .
oec:ModuleC1 a oec:ConformityAssessmentModule ; rdfs:label "Module C1 — Conformity to type based on internal production control plus supervised product testing"@en ; skos:notation "C1" .
oec:ModuleC2 a oec:ConformityAssessmentModule ; rdfs:label "Module C2 — Conformity to type based on internal production control plus supervised product checks at random intervals"@en ; skos:notation "C2" .
oec:ModuleD  a oec:ConformityAssessmentModule ; rdfs:label "Module D — Conformity to type based on quality assurance of the production process"@en ; skos:notation "D" .
oec:ModuleD1 a oec:ConformityAssessmentModule ; rdfs:label "Module D1 — Quality assurance of the production process"@en ; skos:notation "D1" .
oec:ModuleE  a oec:ConformityAssessmentModule ; rdfs:label "Module E — Conformity to type based on product quality assurance"@en ; skos:notation "E" .
oec:ModuleE1 a oec:ConformityAssessmentModule ; rdfs:label "Module E1 — Quality assurance of final product inspection and testing"@en ; skos:notation "E1" .
oec:ModuleF  a oec:ConformityAssessmentModule ; rdfs:label "Module F — Conformity to type based on product verification"@en ; skos:notation "F" .
oec:ModuleF1 a oec:ConformityAssessmentModule ; rdfs:label "Module F1 — Conformity based on product verification"@en ; skos:notation "F1" .
oec:ModuleG  a oec:ConformityAssessmentModule ; rdfs:label "Module G — Conformity based on unit verification"@en ; skos:notation "G" .
oec:ModuleH  a oec:ConformityAssessmentModule ; rdfs:label "Module H — Conformity based on full quality assurance"@en ; skos:notation "H" .
oec:ModuleH1 a oec:ConformityAssessmentModule ; rdfs:label "Module H1 — Conformity based on full quality assurance plus design examination"@en ; skos:notation "H1" .

# =============================================================================
# Operational Scope Enumeration (UNTP alignment)
# =============================================================================

oec:OperationalScope
    a rdfs:Class ;
    rdfs:label "Operational Scope"@en ;
    rdfs:comment "Lifecycle boundary for emissions or environmental impact calculations."@en ;
    dcterms:source <https://untp.unece.org/docs/specification/> ;
    owl:oneOf (oec:CradleToGate oec:CradleToGrave) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> .

oec:CradleToGate a oec:OperationalScope ; rdfs:label "Cradle to Gate"@en ;
    rdfs:comment "Emissions from raw material extraction through manufacturing, excluding use phase and end-of-life."@en .
oec:CradleToGrave a oec:OperationalScope ; rdfs:label "Cradle to Grave"@en ;
    rdfs:comment "Full lifecycle emissions including raw materials, manufacturing, use phase, and end-of-life."@en .

# =============================================================================
# Granularity Level Enumeration (UNTP alignment)
# =============================================================================

oec:GranularityLevel
    a rdfs:Class ;
    rdfs:label "Granularity Level"@en ;
    rdfs:comment "Passport-level granularity per EN 18223 'granularity': model, batch, or item. Values are the lowercase string tokens given by skos:notation. In EPCIS4DPP the level is derived from the GS1 Digital Link Application Identifiers."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.2 (CEN/CENELEC JTC 24)" ;
    owl:oneOf (oec:Model oec:Batch oec:Item) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso cirpass2:ProductIdentifierGranularity .

oec:Model a oec:GranularityLevel ; rdfs:label "Model"@en ; skos:notation "model" ;
    rdfs:comment "DPP data applies to all products of this model or class. GS1 Digital Link 01/{gtin}."@en .
oec:Batch a oec:GranularityLevel ; rdfs:label "Batch"@en ; skos:notation "batch" ;
    rdfs:comment "DPP data applies to a specific production batch. GS1 Digital Link 01/{gtin}/10/{lot}."@en .
oec:Item a oec:GranularityLevel ; rdfs:label "Item"@en ; skos:notation "item" ;
    rdfs:comment "DPP data applies to an individual serialized item. GS1 Digital Link 01/{gtin}/21/{serial}."@en .

# =============================================================================
# Properties - Operator Information
# =============================================================================

oec:hasOperatorInformation
    a owl:ObjectProperty ;
    rdfs:label "Operator Information"@en ;
    rdfs:comment "Economic operator responsible for the product."@en ;
    rdfs:range oec:OperatorInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    skos:narrowMatch gs1:manufacturer ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#operatorInformation> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#manufacturerInformation> .

oec:hasOperatorRole
    a owl:ObjectProperty ;
    rdfs:label "Operator Role"@en ;
    rdfs:comment "Role of the economic operator (manufacturer, importer, etc.)."@en ;
    rdfs:domain oec:OperatorInformation ;
    rdfs:range oec:OperatorRole ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    rdfs:seeAlso cv:role ;
    skos:closeMatch gs1:organizationRole ;
    skos:broadMatch cv:role .

oec:registrationNumber
    a owl:DatatypeProperty ;
    rdfs:label "Registration Number"@en ;
    rdfs:comment "Official registration or license number."@en ;
    rdfs:domain oec:OperatorInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:registryEntry ;
    skos:broadMatch gs1:regulatoryReferenceNumber ;
    skos:narrowMatch schema:companyRegistration .

# =============================================================================
# Properties - Due Diligence
# =============================================================================

oec:hasDueDiligenceReport
    a owl:ObjectProperty ;
    rdfs:label "Due Diligence Report"@en ;
    rdfs:comment "Reference to due diligence documentation."@en ;
    rdfs:range oec:DueDiligenceReport ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.Labels:1.2.0#resultOfTestReport> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.SupplyChainDueDiligence:1.2.0#supplyChainDueDiligenceReport> ;
    skos:exactMatch dppk:dueDiligenceReport .

oec:reportUrl
    a owl:DatatypeProperty ;
    rdfs:label "Report URL"@en ;
    rdfs:comment "URL to the due diligence report."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:referencedFileURL ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.SupplyChainDueDiligence:1.2.0#supplyChainDueDiligenceReport> .

oec:thirdPartyAssurancesUrl
    a owl:DatatypeProperty ;
    rdfs:label "Third Party Assurances URL"@en ;
    rdfs:comment "URL to third party verification or assurances."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:reportDate
    a owl:DatatypeProperty ;
    rdfs:label "Report Date"@en ;
    rdfs:comment "Date of the due diligence report."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasVerificationBody
    a owl:ObjectProperty ;
    rdfs:label "Verification Body"@en ;
    rdfs:comment "Organization that performed third-party verification."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso cirpass2:hasNotifiedBody .

# =============================================================================
# Properties - Hazardous Substances
# =============================================================================

oec:hasHazardousSubstances
    a owl:ObjectProperty ;
    rdfs:label "Hazardous Substances"@en ;
    rdfs:comment "Hazardous substances present in the product."@en ;
    rdfs:range oec:HazardousSubstance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en ;
    skos:closeMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstances> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceIdentifier> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceClass> ;
    rdfs:seeAlso dppk:substancesOfConcern ;
    skos:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceIdentifier> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceClass> .

oec:hasHazardClass
    a owl:ObjectProperty ;
    rdfs:label "Hazard Class"@en ;
    rdfs:comment "CLP Regulation hazard classification."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range oec:HazardClass ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en ;
    skos:exactMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceClass> .

oec:casNumber
    a owl:DatatypeProperty ;
    rdfs:label "CAS Number"@en ;
    rdfs:comment "Chemical Abstracts Service registry number."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso dppk:componentCasNumber ;
    skos:closeMatch dppk:componentCasNumber ;
    rdfs:seeAlso cirpass2:numberCAS ;
    skos:exactMatch <https://w3id.org/eudpp#numberCAS> .

oec:hasMaterialOrigin
    a owl:ObjectProperty ;
    rdfs:label "Material Origin"@en ;
    rdfs:comment "Country of origin of an individual material or component within the product composition, as a gs1:Country value."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range gs1:Country ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Required extension: gs1:countryOfOrigin and schema:countryOfOrigin are product-scoped (rdfs:domain gs1:Product); ESPR Article 7 supply-chain transparency needs origin per material/component entry."@en ;
    rdfs:seeAlso gs1:countryOfOrigin ;
    skos:broadMatch schema:countryOfOrigin ;
    rdfs:seeAlso cirpass2:MaterialOrigin ;
    rdfs:seeAlso cirpass2:hasMaterialOrigin .

oec:concentration
    a owl:DatatypeProperty ;
    rdfs:label "Concentration"@en ;
    rdfs:comment "Concentration of the hazardous substance as percentage."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceConcentration> ;
    rdfs:seeAlso cirpass2:Concentration ;
    rdfs:seeAlso cirpass2:hasConcentration .

oec:socThreshold
    a owl:DatatypeProperty ;
    rdfs:label "Substance of Concern Threshold"@en ;
    rdfs:comment "Concentration threshold (percentage by weight) above which the presence of the substance of concern must be declared in the passport, per the applicable delegated act."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Art. 7(5) lets delegated acts set thresholds for substance-of-concern tracking; the declared concentration (oec:concentration) only becomes interpretable against that threshold. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso oec:concentration ;
    rdfs:seeAlso cirpass2:Threshold ;
    rdfs:seeAlso cirpass2:ThresholdOfSubstanceOfConcern ;
    rdfs:seeAlso cirpass2:hasThreshold .

oec:iupacName
    a owl:DatatypeProperty ;
    rdfs:label "IUPAC Name"@en ;
    rdfs:comment "Systematic IUPAC nomenclature name of the substance."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "REACH Art. 119(1) treats the IUPAC name as part of the public substance identity; CAS/EC numbers (oec:casNumber, oec:ecNumber) identify but do not name. schema:iupacName exists but is domained on schema:MolecularEntity (Bioschemas), not on product-embedded substances, so a closeMatch is asserted rather than direct reuse."@en ;
    skos:closeMatch schema:iupacName ;
    rdfs:seeAlso cirpass2:nameIUPAC ;
    skos:broadMatch <https://w3id.org/eudpp#otherName> .

oec:substanceTradeName
    a owl:DatatypeProperty ;
    rdfs:label "Substance Trade Name"@en ;
    rdfs:comment "Commercial or trade name under which the substance is marketed, where it differs from the systematic name."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Substance identity element carried by SCIP dossiers and the CIRPASS-2 SOC module; distinct from the product-level brand name (gs1:brandName identifies the trade item, not an ingredient substance)."@en ;
    rdfs:seeAlso cirpass2:tradeName ;
    skos:broadMatch <https://w3id.org/eudpp#otherName> .

oec:hazardImpact
    a owl:DatatypeProperty ;
    rdfs:label "Hazard Impact"@en ;
    rdfs:comment "Description of the hazard impact."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range rdf:langString ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en .

# =============================================================================
# Properties - Document Reference
# =============================================================================

oec:hasDocuments
    a owl:ObjectProperty ;
    rdfs:label "Documents"@en ;
    rdfs:comment "Supporting documents for the product. DPP-specific counterpart to gs1:referencedFile: the oec:DocumentReference range adds document typing and ESPR access-rights semantics that gs1:ReferencedFileDetails does not carry."@en ;
    rdfs:range oec:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:referencedFile ;
    skos:closeMatch gs1:referencedFile .

oec:hasDocumentType
    a owl:ObjectProperty ;
    rdfs:label "Document Type"@en ;
    rdfs:domain oec:DocumentReference ;
    rdfs:range oec:DocumentType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#documentType> ;
    skos:broadMatch dppk:europeanAssessmentDocument .

oec:documentUrl
    a owl:DatatypeProperty ;
    rdfs:label "Document URL"@en ;
    rdfs:comment "URL to the document. See also gs1:referencedFileURL."@en ;
    rdfs:domain oec:DocumentReference ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:referencedFileURL ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:referencedFileURL ;
    skos:exactMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#documentURL> ;
    skos:closeMatch gs1:referencedFile .

oec:mimeType
    a owl:DatatypeProperty ;
    rdfs:label "MIME Type"@en ;
    rdfs:domain oec:DocumentReference ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#mimeType> .

oec:languageCode
    a owl:DatatypeProperty ;
    rdfs:label "Language Code"@en ;
    rdfs:comment "ISO 639-1 language code. See also gs1:fileLanguageCode."@en ;
    rdfs:domain oec:DocumentReference ;
    rdfs:range xsd:string ;
    rdfs:seeAlso gs1:fileLanguageCode ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch gs1:fileLanguageCode ;
    skos:broadMatch schema:inLanguage .

oec:issueDate
    a owl:DatatypeProperty ;
    rdfs:label "Issue Date"@en ;
    rdfs:domain oec:DocumentReference ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch untp:issueDate ;
    skos:exactMatch dppk:dateOfIssue .

oec:hasConformityDeclaration
    a owl:ObjectProperty ;
    rdfs:label "Conformity Declaration"@en ;
    rdfs:comment "Links a product to the declaration(s) asserting its conformity with the applicable EU legislation, referenced as oec:DocumentReference entries typed oec:DeclarationOfConformity."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting conformity pattern: every regulation module has to carry the EU declaration of conformity (ESPR Article 4 and each delegated act). GS1 stops at gs1:certification / gs1:ReferencedFileTypeCode-DECLARATION_OF_CONFORMITY, which describe a certificate and a file type rather than a product-to-declaration relation; CCCEV models the evidence/requirement pair but no product-side property. This is the oec: target the UNTP bridge compacts untp:conformityClaim onto."@en ;
    rdfs:seeAlso gs1:certification ;
    rdfs:seeAlso gs1:ReferencedFileTypeCode-DECLARATION_OF_CONFORMITY ;
    rdfs:seeAlso cccev:Evidence ;
    # untp:conformityClaim was removed from the published UNTP vocabulary (both
    # hosts return 403 for it, 2026-08-04); the nearest surviving concept is the
    # attestation class, referenced without a subsumption claim.
    rdfs:seeAlso untp:ConformityAttestation ;
    skos:broadMatch cccev:Evidence .

oec:combinedNomenclatureCode
    a owl:DatatypeProperty ;
    rdfs:label "Combined Nomenclature Code"@en ;
    rdfs:comment "The EU Combined Nomenclature (CN) commodity code classifying the product for customs and regulatory scoping, e.g. '3402 50 10' for a retail detergent preparation."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting: the CN code is how EU product law delimits its own scope, so it recurs across the Detergents Regulation (EU) 2026/405, EUDR 2023/1115 Annex I, CBAM and PPWR. GS1 publishes no tariff or commodity-code property (its customs terms are OrganizationRoleType / LocationRoleType code-list members), SEMICeu has none, and schema.org has none."@en ;
    rdfs:seeAlso gs1:gpcCategoryCode ;
    rdfs:seeAlso schema:additionalProperty ;
    skos:relatedMatch gs1:gpcCategoryCode .

# =============================================================================
# Properties - Circularity Performance
# =============================================================================

oec:hasCircularityPerformance
    a owl:ObjectProperty ;
    rdfs:label "Circularity Performance"@en ;
    rdfs:comment "Circularity performance data for the product."@en ;
    rdfs:range oec:CircularityPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    rdfs:seeAlso dppk:performance .

oec:recyclableContent
    a owl:DatatypeProperty ;
    rdfs:label "Recyclable Content"@en ;
    rdfs:comment "Fraction of product that can be recycled (0-1 scale where 0.45 = 45%)."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP recyclableContent."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

oec:endOfLifeInstructions
    a owl:DatatypeProperty ;
    rdfs:label "End of Life Instructions"@en ;
    rdfs:comment "URL to end-of-life handling instructions. For text-based recycling guidance, see gs1:consumerRecyclingInstructions."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    rdfs:seeAlso dppk:endOfLifeInstructions ;
    skos:exactMatch dppk:endOfLifeInstructions ;
    rdfs:seeAlso gs1:sustainabilityInfo ;
    skos:closeMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#endOfLifeInformation> ;
    skos:broadMatch gs1:instructions ;
    skos:broadMatch gs1:sustainabilityInfo .

oec:wastePreventionInfo
    a owl:DatatypeProperty ;
    rdfs:label "Waste Prevention Info"@en ;
    rdfs:comment "URL to waste prevention information. For text-based recycling guidance, see gs1:consumerRecyclingInstructions."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:sustainabilityInfo ;
    skos:exactMatch dppk:wastePreventionInfo .

oec:separateCollectionInfo
    a owl:DatatypeProperty ;
    rdfs:label "Separate Collection Info"@en ;
    rdfs:comment "URL to separate collection requirements. For text-based recycling guidance, see gs1:consumerRecyclingInstructions."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:sustainabilityInfo .

oec:hasDismantlingInstructions
    a owl:ObjectProperty ;
    rdfs:label "Dismantling Instructions"@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range oec:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso dppk:dismantlingInformation ;
    skos:exactMatch dppk:disassemblyInstructions ;
    skos:broadMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#dismantlingAndRemovalInformation> ;
    skos:broadMatch gs1:instructions .

oec:utilityFactor
    a owl:DatatypeProperty ;
    rdfs:label "Utility Factor"@en ;
    rdfs:comment "Durability of the product relative to industry average (1.0 = average). A value >1 indicates above-average durability."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    dcterms:source <https://untp.unece.org/docs/specification/> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:measuredProperty .

oec:materialCircularityIndicator
    a owl:DatatypeProperty ;
    rdfs:label "Material Circularity Indicator"@en ;
    rdfs:comment "Overall circularity score combining recycled input, recyclability, and utility (0-1 scale)."@en ;
    rdfs:domain oec:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    dcterms:source <https://ellenmacarthurfoundation.org/material-circularity-indicator> ;
    skos:note "Value is a decimal fraction 0-1. Based on Ellen MacArthur Foundation MCI methodology. Aligned with UNTP."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso dppk:recyclabilityScore ;
    rdfs:seeAlso oec:recyclabilityScore ;
    rdfs:seeAlso oec:hasRecyclabilityAssessment .

# =============================================================================
# Properties - Recycled Content
# =============================================================================

oec:hasRecycledContentDetails
    a owl:ObjectProperty ;
    rdfs:label "Recycled Content Details"@en ;
    rdfs:comment "Detailed recycled content breakdown with pre/post-consumer splits."@en ;
    rdfs:range oec:RecycledContent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    rdfs:seeAlso dppk:recycledContentPercentage ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    skos:broadMatch untp:recycledMassFraction ;
    rdfs:seeAlso oec:recyclableContent ;
    rdfs:seeAlso dppk:postConsumerRecycledContent ;
    skos:closeMatch dppk:postConsumerRecycledContentMass ;
    rdfs:seeAlso dppk:preConsumerRecycledContentPercentage ;
    rdfs:seeAlso dppk:postConsumerRecycledMaterialComposition ;
    rdfs:seeAlso dppk:preConsumerRecycledContent ;
    rdfs:seeAlso dppk:preConsumerRecycledContentMass ;
    rdfs:seeAlso dppk:preConsumerRecycledMaterialComposition ;
    skos:broadMatch dppk:recycledContentPercentage ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#postConsumerShare> ;
    rdfs:seeAlso dppk:postConsumerRecycledContentPercentage ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    skos:narrowMatch dppk:postConsumerRecycledContentPercentage ;
    skos:narrowMatch dppk:postConsumerRecycledContent ;
    skos:narrowMatch dppk:preConsumerRecycledContentPercentage ;
    skos:narrowMatch dppk:postConsumerRecycledMaterialComposition ;
    skos:narrowMatch dppk:preConsumerRecycledContent ;
    skos:narrowMatch dppk:preConsumerRecycledContentMass ;
    skos:narrowMatch dppk:preConsumerRecycledMaterialComposition ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#postConsumerShare> .

# Note: oec:recycledContent as DatatypeProperty (total percentage) is defined below
# to align with UNTP. The ObjectProperty version is renamed to recycledContentDetails.

oec:recycledContent
    a owl:DatatypeProperty ;
    rdfs:label "Recycled Content"@en ;
    rdfs:comment "Total fraction of recycled content (0-1 scale where 0.45 = 45%)."@en ;
    rdfs:domain oec:RecycledContent ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP recycledContent."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    rdfs:seeAlso dppk:packagingRecycledContent ;
    rdfs:seeAlso dppk:postConsumerRecycledContentPercentage ;
    skos:broadMatch dppk:preConsumerRecycledContentPercentage ;
    skos:broadMatch dppk:postConsumerRecycledContent ;
    skos:broadMatch dppk:preConsumerRecycledContent ;
    skos:exactMatch dppk:recycledContentPercentage ;
    skos:closeMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    skos:narrowMatch dppk:packagingRecycledContent .

oec:preConsumerRecycledContent
    a owl:DatatypeProperty ;
    rdfs:label "Pre-Consumer Recycled Content"@en ;
    rdfs:comment "Fraction of pre-consumer (post-industrial) recycled content (0-1 scale)."@en ;
    rdfs:domain oec:RecycledContent ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:preConsumerRecycledContent ;
    skos:exactMatch dppk:preConsumerRecycledContent ;
    skos:exactMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#preConsumerShare> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    skos:exactMatch dppk:preConsumerRecycledContentPercentage ;
    rdfs:seeAlso oec:recyclableContent ;
    rdfs:seeAlso untp:recycledMassFraction ;
    rdfs:seeAlso gs1:textileMaterialContent .

oec:postConsumerRecycledContent
    a owl:DatatypeProperty ;
    rdfs:label "Post-Consumer Recycled Content"@en ;
    rdfs:comment "Fraction of post-consumer recycled content (0-1 scale)."@en ;
    rdfs:domain oec:RecycledContent ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:postConsumerRecycledContent ;
    skos:exactMatch dppk:postConsumerRecycledContent ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledContent> ;
    skos:closeMatch untp:recycledMassFraction .

# =============================================================================
# Properties - Material Composition
# =============================================================================

oec:hasMaterialComposition
    a owl:ObjectProperty ;
    rdfs:label "Material Composition"@en ;
    rdfs:range oec:MaterialComposition ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:textileMaterialContent ;
    rdfs:seeAlso dppk:fibreComposition ;
    rdfs:seeAlso dppk:packagingMaterialCompositionQuantity ;
    rdfs:seeAlso dppk:postConsumerRecycledMaterialComposition ;
    rdfs:seeAlso gs1:textileMaterialDescription ;
    rdfs:seeAlso dppk:preConsumerRecycledMaterialComposition ;
    rdfs:seeAlso gs1:packagingMaterial ;
    rdfs:seeAlso gs1:packagingMaterialType ;
    rdfs:seeAlso dppk:packagingMaterialType ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Circularity:1.2.0#recycledMaterial> ;
    rdfs:seeAlso gs1:upperMaterialType ;
    skos:exactMatch dppk:materialComposition ;
    skos:narrowMatch gs1:textileMaterial ;
    skos:narrowMatch gs1:textileMaterialDescription ;
    skos:narrowMatch gs1:packagingMaterialType ;
    skos:narrowMatch dppk:preConsumerRecycledMaterialComposition .

oec:massFraction
    a owl:DatatypeProperty ;
    rdfs:label "Mass Fraction"@en ;
    rdfs:comment "Mass fraction of this material (0-1 scale where 0.45 = 45%)."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp:massFraction ;
    skos:exactMatch untp:massFraction ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP massFraction."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso cirpass2:materialPercentage .

oec:isCriticalRawMaterial
    a owl:DatatypeProperty ;
    rdfs:label "Is Critical Raw Material"@en ;
    rdfs:comment "Whether this material is on the EU Critical Raw Materials list."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso cirpass2:isCriticalRawMaterial .

oec:componentName
    a owl:DatatypeProperty ;
    rdfs:label "Component Name"@en ;
    rdfs:comment "Human-readable name of the material or component (e.g. a fibre type, alloy, or constituent material)."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:string ;
    # dpp-sh:MaterialCompositionShape requires a schema:name on every
    # oec:MaterialComposition. A component name IS the node's name, so naming a
    # component with the more specific term must satisfy that obligation rather
    # than compete with it. Subordinating our own term to the Layer-1 one is the
    # allowed direction under the delegation rule (GS1 -> SEMICeu -> schema.org).
    rdfs:subPropertyOf schema:name ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso schema:name ;
    rdfs:seeAlso dppk:componentName ;
    skos:exactMatch dppk:componentName ;
    skos:note "Generic component-naming pattern shared by textile fibre composition, steel material composition, and substance declarations. Anchored to DPP Keystone dppk:componentName (peer DPP profile) and schema:name."@en ;
    rdfs:seeAlso gs1:ingredientName ;
    skos:narrowMatch gs1:additiveName ;
    skos:broadMatch schema:name .

oec:componentIdentifier
    a owl:DatatypeProperty ;
    rdfs:label "Component Identifier"@en ;
    rdfs:comment "Identifier for the material or component (e.g. an internal material code or GS1 identifier)."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso schema:identifier ;
    rdfs:seeAlso dppk:componentIdentifier ;
    skos:exactMatch dppk:componentIdentifier ;
    skos:note "Generic component-identifier pattern. Anchored to DPP Keystone dppk:componentIdentifier (peer DPP profile) and schema:identifier."@en ;
    skos:broadMatch schema:identifier ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterialIdentifier> ;
    skos:exactMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#componentId> ;
    skos:broadMatch adms:identifier ;
    skos:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterialIdentifier> .

# =============================================================================
# Properties - Carbon Footprint / Emissions Performance
# Aligned with GDSN Implementation Guideline for exchanging Carbon Footprint Data
# and UNTP EmissionsPerformance pattern
# =============================================================================

oec:hasEmissionsPerformance
    a owl:ObjectProperty ;
    rdfs:label "Emissions Performance"@en ;
    rdfs:comment "Emissions performance data container. Aligned with UNTP EmissionsPerformance."@en ;
    rdfs:range oec:EmissionsPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso dppk:performance .

oec:hasCarbonFootprint
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint"@en ;
    rdfs:comment "Carbon footprint measurement for the product."@en ;
    rdfs:range gs1:QuantitativeValue ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf> ;
    skos:note """Required extension: GS1 GDSN provides carbon footprint attributes but they are not
yet part of GS1 Web Vocabulary. This property aligns with the GDSN CFP Implementation Guideline.
Use gs1:QuantitativeValue for the measurement value with appropriate unitCode."""@en;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> .

oec:carbonFootprintTotal
    a owl:DatatypeProperty ;
    rdfs:label "Carbon Footprint Total"@en ;
    rdfs:comment "Total lifecycle carbon footprint in kg CO2e. Aligned with UNTP carbonFootprint."@en ;
    rdfs:range xsd:decimal ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf> ;
    skos:note "Aligned with GDSN CarbonFootprintHeader/cfpValue and UNTP carbonFootprint. Value in kg CO2 equivalent."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    rdfs:seeAlso oec:hasCarbonFootprintProduction ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    skos:exactMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> .

oec:declaredUnit
    a owl:DatatypeProperty ;
    rdfs:label "Declared Unit"@en ;
    rdfs:comment "Functional unit for carbon footprint or other metrics (e.g., kg CO2e/kWh, kg CO2e/kg). Aligned with UNTP declaredUnit."@en ;
    rdfs:range xsd:string ;
    skos:note "Aligned with GDSN cfpFunctionalUnit and UNTP declaredUnit. Specifies the reference unit for measurements."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:exactMatch dppk:declaredUnit ;
    skos:broadMatch gs1:unitCode ;
    skos:broadMatch <https://w3id.org/eudpp#hasUnitOfMeasure> .

oec:carbonFootprintStudyUrl
    a owl:DatatypeProperty ;
    rdfs:label "Carbon Footprint Study URL"@en ;
    rdfs:comment "URL to the full carbon footprint study."@en ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:referencedFileURL ;
    skos:note "Consider also using gs1:referencedFile with gs1:ReferencedFileTypeCode-CERTIFICATION for the study document."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:exactMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintStudy> ;
    skos:broadMatch gs1:referencedFileURL .

oec:hasOperationalScope
    a owl:ObjectProperty ;
    rdfs:label "Operational Scope"@en ;
    rdfs:comment "Lifecycle boundary for emissions calculation (CradleToGate or CradleToGrave)."@en ;
    rdfs:domain oec:EmissionsPerformance ;
    rdfs:range oec:OperationalScope ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#lifecycleStage> .

oec:primarySourcedRatio
    a owl:DatatypeProperty ;
    rdfs:label "Primary Sourced Ratio"@en ;
    rdfs:comment "Proportion of data from direct measurement vs estimates (0-1 scale)."@en ;
    rdfs:domain oec:EmissionsPerformance ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1. Higher values indicate more reliable data from direct measurement. Aligned with UNTP."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

# =============================================================================
# Properties - Data Quality and Provenance
# =============================================================================

oec:lastDataUpdate
    a owl:DatatypeProperty ;
    rdfs:label "Last Data Update"@en ;
    rdfs:comment "Timestamp of the last update to the DPP data."@en ;
    rdfs:range xsd:dateTime ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:sdDatePublished ;
    skos:exactMatch <urn:samm:io.BatteryPass.Performance:1.2.1#lastUpdate> ;
    skos:exactMatch dppk:lastUpdate ;
    skos:narrowMatch <https://w3id.org/eudpp#lastUpdate> .

oec:dataQualityAssessment
    a owl:DatatypeProperty ;
    rdfs:label "Data Quality Assessment"@en ;
    rdfs:comment "Assessment of data quality and completeness (A-E rating)."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:dataProviderCertification
    a owl:DatatypeProperty ;
    rdfs:label "Data Provider Certification"@en ;
    rdfs:comment "Certification or accreditation of the data provider."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:hasCertification ;
    rdfs:seeAlso gs1:certification ;
    skos:broadMatch schema:hasCertification ;
    skos:broadMatch gs1:certification .

# =============================================================================
# Properties - Traceability Performance (UNTP alignment)
# =============================================================================

oec:hasTraceabilityPerformance
    a owl:ObjectProperty ;
    rdfs:label "Traceability Performance"@en ;
    rdfs:comment "Traceability performance metrics for supply chain verification."@en ;
    rdfs:range oec:TraceabilityPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:verifiedRatio
    a owl:DatatypeProperty ;
    rdfs:label "Verified Ratio"@en ;
    rdfs:comment "Proportion of materials verifiably traced through the supply chain (0-1 scale)."@en ;
    rdfs:domain oec:TraceabilityPerformance ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1. Higher values indicate better supply chain traceability. Aligned with UNTP."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

oec:granularityLevel
    a owl:DatatypeProperty ;
    rdfs:label "Granularity Level"@en ;
    rdfs:comment "Passport-level granularity (EN 18223 'granularity'): the string token 'model', 'batch', or 'item' (see oec:GranularityLevel)."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.2 (CEN/CENELEC JTC 24)" ;
    skos:note "EN 18223 'granularity'. Allowed values model/batch/item; in EPCIS4DPP derived from the GS1 Digital Link AIs (01 model, 01+10 batch, 01+21 item)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso cirpass2:granularity ;
    skos:exactMatch <https://w3id.org/eudpp#granularity> .

# =============================================================================
# Properties - Regulatory Information Extension
# =============================================================================

oec:complianceDate
    a owl:DatatypeProperty ;
    rdfs:label "Compliance Date"@en ;
    rdfs:comment "Date of compliance verification."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:auditDate ;
    rdfs:seeAlso gs1:certificationAuditDate .

oec:complianceStatus
    a owl:DatatypeProperty ;
    rdfs:label "Compliance Status"@en ;
    rdfs:comment "Current compliance status."@en ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Properties - ESPR Economic Operator Identification (Article 77)
# =============================================================================

oec:economicOperatorId
    a owl:DatatypeProperty ;
    rdfs:label "Economic Operator ID"@en ;
    rdfs:comment """Unique EOID from the EU economic operator registry per ESPR Article 77.
This replaces individual national registrations with a single EU-wide identifier."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:domain oec:OperatorInformation ;
    rdfs:range xsd:string ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    skos:exactMatch dppk:economicOperatorId ;
    rdfs:seeAlso gs1:additionalOrganizationID ;
    rdfs:seeAlso cirpass2:hasUniqueOperatorIdentifier .

oec:eoriNumber
    a owl:DatatypeProperty ;
    rdfs:label "EORI Number"@en ;
    rdfs:comment "Economic Operators Registration and Identification (EORI) number for customs purposes."@en ;
    rdfs:domain oec:OperatorInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:regulatoryReferenceNumber .

# =============================================================================
# Properties - Facility Information
# =============================================================================

oec:hasFacilityInformation
    a owl:ObjectProperty ;
    rdfs:label "Facility Information"@en ;
    rdfs:comment "Manufacturing or processing facility details."@en ;
    rdfs:range oec:FacilityInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    rdfs:seeAlso schema:cvdFacilityId .

oec:facilityType
    a owl:DatatypeProperty ;
    rdfs:label "Facility Type"@en ;
    rdfs:comment "Type of facility (manufacturing, processing, assembly, etc.)."@en ;
    rdfs:domain oec:FacilityInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en .

oec:hasFacilityCertifications
    a owl:ObjectProperty ;
    rdfs:label "Facility Certifications"@en ;
    rdfs:comment "Certifications held by the facility (ISO 9001, ISO 14001, etc.)."@en ;
    rdfs:domain oec:FacilityInformation ;
    rdfs:range gs1:CertificationDetails ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    skos:broadMatch gs1:certification ;
    skos:broadMatch schema:hasCertification ;
    skos:broadMatch gs1:certificationInfo ;
    rdfs:seeAlso gs1:certificationIdentification .

# =============================================================================
# Properties - Substances of Concern (SCIP Database Alignment)
# =============================================================================

oec:hasSubstancesOfConcern
    a owl:ObjectProperty ;
    rdfs:label "Substances of Concern"@en ;
    rdfs:comment "List of substances of concern present in the product per ESPR and SCIP database requirements."@en ;
    rdfs:range oec:SubstanceOfConcern ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en ;
    rdfs:seeAlso dppk:substancesOfConcern ;
    skos:exactMatch dppk:substancesOfConcern ;
    rdfs:seeAlso gs1:ingredientOfConcern ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstances> ;
    skos:narrowMatch dppk:textileSubstancesOfConcern ;
    skos:exactMatch <https://w3id.org/eudpp#containsSubstanceOfConcern> .

oec:ecNumber
    a owl:DatatypeProperty ;
    rdfs:label "EC Number"@en ;
    rdfs:comment "European Community number for the substance (EINECS/ELINCS)."@en ;
    rdfs:domain oec:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso dppk:componentEcNumber ;
    skos:closeMatch dppk:componentEcNumber ;
    rdfs:seeAlso cirpass2:numberEC ;
    skos:exactMatch <https://w3id.org/eudpp#numberEC> .

oec:scipId
    a owl:DatatypeProperty ;
    rdfs:label "SCIP ID"@en ;
    rdfs:comment "Identifier in the ECHA SCIP database (Substances of Concern In Products)."@en ;
    rdfs:domain oec:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en ;
    skos:broadMatch schema:identifier .

oec:substanceLocation
    a owl:DatatypeProperty ;
    rdfs:label "Substance Location"@en ;
    rdfs:comment "Location or component where the substance is present in the product."@en ;
    rdfs:domain oec:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en ;
    rdfs:seeAlso dppk:componentLocationInProduct ;
    skos:closeMatch dppk:componentLocationInProduct ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceLocation> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterialLocation> ;
    rdfs:seeAlso locn:location ;
    skos:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#hazardousSubstanceLocation> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterialLocation> ;
    skos:broadMatch locn:location ;
    skos:broadMatch gs1:locationDescription ;
    rdfs:seeAlso cirpass2:substanceLocation ;
    skos:exactMatch <https://w3id.org/eudpp#substanceLocation> .

oec:safeUseInstructions
    a owl:DatatypeProperty ;
    rdfs:label "Safe Use Instructions"@en ;
    rdfs:comment "Instructions for safe use of the product containing the substance of concern."@en ;
    rdfs:domain oec:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso dppk:safeUseInstructions ;
    skos:exactMatch dppk:safeUseInstructions ;
    rdfs:seeAlso gs1:consumerSafetyInformation ;
    skos:broadMatch gs1:consumerUsageInstructions ;
    skos:broadMatch gs1:instructions ;
    skos:broadMatch gs1:instructionsForUse ;
    skos:broadMatch dppk:instructionsForUse ;
    skos:broadMatch gs1:consumerSafetyInformation .

oec:safeDisassemblyInstructions
    a owl:DatatypeProperty ;
    rdfs:label "Safe Disassembly Instructions"@en ;
    rdfs:comment "Instructions for safe disassembly and handling of components containing the substance."@en ;
    rdfs:domain oec:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:instructions ;
    skos:broadMatch dppk:disassemblyInstructions ;
    skos:broadMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#dismantlingAndRemovalInformation> ;
    skos:broadMatch dppk:endOfLifeInstructions .

# =============================================================================
# Properties - Performance and Durability (ESPR Article 7)
# =============================================================================

oec:hasPerformanceInfo
    a owl:ObjectProperty ;
    rdfs:label "Performance Information"@en ;
    rdfs:comment "Product performance and durability information."@en ;
    rdfs:range oec:PerformanceInfo ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasExpectedLifespan
    a owl:ObjectProperty ;
    rdfs:label "Expected Lifespan"@en ;
    rdfs:comment "Expected product lifespan. Use gs1:QuantitativeValue with unitCode (e.g., 'ANN' for years)."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:closeMatch <urn:samm:io.BatteryPass.Performance:1.2.1#expectedLifetime> .

oec:hasGuaranteedLifespan
    a owl:ObjectProperty ;
    rdfs:label "Guaranteed Lifespan"@en ;
    rdfs:comment "Guaranteed minimum product lifespan per manufacturer warranty. Use unitCode 'ANN' (UN/CEFACT Rec 20)."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:durationOfWarranty .

oec:usageCycles
    a owl:DatatypeProperty ;
    rdfs:label "Usage Cycles"@en ;
    rdfs:comment "Number of expected usage cycles (e.g., charging cycles for batteries)."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range xsd:integer ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:closeMatch <urn:samm:io.BatteryPass.Performance:1.2.1#expectedNumberOfCycles> ;
    skos:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#batteryCondition> .

oec:hasTechnicalLifetime
    a owl:ObjectProperty ;
    rdfs:label "Technical Lifetime"@en ;
    rdfs:comment "Technical lifetime under specified conditions. Use unitCode 'ANN' (UN/CEFACT Rec 20)."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:closeMatch <urn:samm:io.BatteryPass.Performance:1.2.1#expectedLifetime> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#batteryTechnicalProperties> .

oec:performanceClass
    a owl:DatatypeProperty ;
    rdfs:label "Performance Class"@en ;
    rdfs:comment "Performance or efficiency class (e.g., A+++ to G for energy labels)."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso dppk:energyEfficiencyClass ;
    rdfs:seeAlso oec:hasEnergyEfficiencyClass ;
    rdfs:seeAlso schema:energyEfficiencyScaleMax ;
    skos:broadMatch dppk:performance .

oec:testedConditions
    a owl:DatatypeProperty ;
    rdfs:label "Tested Conditions"@en ;
    rdfs:comment "Description of conditions under which performance was tested."@en ;
    rdfs:domain oec:PerformanceInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Properties - Repairability (ESPR Article 7)
# =============================================================================

oec:hasRepairabilityInfo
    a owl:ObjectProperty ;
    rdfs:label "Repairability Information"@en ;
    rdfs:comment "Repair and maintenance information for the product."@en ;
    rdfs:range oec:RepairabilityInfo ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    rdfs:seeAlso gs1:serviceInfo ;
    skos:closeMatch gs1:serviceInfo .

oec:repairabilityScore
    a owl:DatatypeProperty ;
    rdfs:label "Repairability Score"@en ;
    rdfs:comment "Repairability index score (typically 0-10 scale, e.g., French Indice de Réparabilité)."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:repairabilityClass
    a owl:DatatypeProperty ;
    rdfs:label "Repairability Class"@en ;
    rdfs:comment "Repairability class (A to E, where A is most repairable)."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:hasSparePartsAvailability
    a owl:ObjectProperty ;
    rdfs:label "Spare Parts Availability"@en ;
    rdfs:comment "Duration for which spare parts will be available. Use gs1:QuantitativeValue with unitCode 'ANN' for years."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasRepairInstructions
    a owl:ObjectProperty ;
    rdfs:label "Repair Instructions"@en ;
    rdfs:comment "URL or reference to repair instructions and manuals."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range oec:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:broadMatch gs1:instructions ;
    rdfs:seeAlso gs1:serviceInfo ;
    skos:broadMatch gs1:serviceInfo ;
    skos:broadMatch <https://w3id.org/eudpp#webLink> .

oec:professionalRepairNetwork
    a owl:DatatypeProperty ;
    rdfs:label "Professional Repair Network"@en ;
    rdfs:comment "URL to find authorized repair service providers."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    rdfs:seeAlso cv:contactPage ;
    rdfs:seeAlso dppk:repairServices ;
    rdfs:seeAlso dppk:repairService .

oec:diyRepairPossible
    a owl:DatatypeProperty ;
    rdfs:label "DIY Repair Possible"@en ;
    rdfs:comment "Whether the product can be repaired by consumers (do-it-yourself repair)."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:hasSoftwareUpdatesAvailability
    a owl:ObjectProperty ;
    rdfs:label "Software Updates Availability"@en ;
    rdfs:comment "Duration for which software/firmware updates will be provided. Use unitCode 'ANN' (UN/CEFACT Rec 20)."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Properties - Access Rights (ESPR Article 9)
# =============================================================================

oec:hasAccessRights
    a owl:ObjectProperty ;
    rdfs:label "Access Rights"@en ;
    rdfs:comment "Access control configuration for this data element."@en ;
    rdfs:range oec:AccessRights ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasAccessLevel
    a owl:ObjectProperty ;
    rdfs:label "Access Level"@en ;
    rdfs:comment "The access level for this data (Public, AuthorizedOnly, Restricted)."@en ;
    rdfs:domain oec:AccessRights ;
    rdfs:range oec:AccessLevel ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:conditionsOfAccess .

oec:hasRenderedAccessLevel
    a owl:ObjectProperty ;
    rdfs:label "Rendered Access Level"@en ;
    rdfs:comment """The access level THIS RENDERING was assembled at — a statement about the
delivery, not about the product. A reader comparing it with oec:hasAccessLevel can tell
whether they were served the whole record or a slice of it, and therefore whether an empty
field is absent or withheld.

Deliberately without rdfs:domain: it sits on the product node while a passport response is
the product, and moves to the response envelope once responses become independently signed
tier slices. That delivery model is implemented by the OpenEPCIS VC platform (module family
openepcis-vc): one Verifiable Credential per access tier, hash-linked via
relatedResource/digestMultibase, so which slice a caller received is a property of the
signed envelope rather than of the record. Fixing a domain now would turn that move into a
contract change.

It must never be persisted. A stored value would claim that a past request's view is a
property of the record."""@en ;
    rdfs:range oec:AccessLevel ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:conditionsOfAccess .

oec:hasAuthorizedParties
    a owl:ObjectProperty ;
    rdfs:label "Authorized Parties"@en ;
    rdfs:comment "List of parties authorized to access restricted data."@en ;
    rdfs:domain oec:AccessRights ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasDataRetentionPeriod
    a owl:ObjectProperty ;
    rdfs:label "Data Retention Period"@en ;
    rdfs:comment "How long the data must be retained per regulatory requirements. Use unitCode 'ANN' (UN/CEFACT Rec 20)."@en ;
    rdfs:domain oec:AccessRights ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Properties - Product Category and Identification
# =============================================================================

oec:hasProductCategory
    a owl:ObjectProperty ;
    rdfs:label "Product Category"@en ;
    rdfs:comment "ESPR product category classification."@en ;
    rdfs:range oec:ProductCategory ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:category ;
    skos:broadMatch gs1:additionalProductClassificationCode ;
    skos:broadMatch <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryCategory> .

oec:passportIdentifier
    a owl:DatatypeProperty ;
    rdfs:label "Passport Identifier"@en ;
    rdfs:comment "Globally unique identifier (URI) for this DPP instance (EN 18223 'digitalProductPassportId'; JSON key digitalProductPassportId)."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:anyURI ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:identifier ;
    skos:broadMatch <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryPassportIdentifier> ;
    rdfs:seeAlso cirpass2:DPPIdentifier .

oec:passportVersion
    a owl:DatatypeProperty ;
    rdfs:label "Passport Version"@en ;
    rdfs:comment "Version of this Digital Product Passport."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:version ;
    skos:closeMatch schema:version .

oec:passportIssueDate
    a owl:DatatypeProperty ;
    rdfs:label "Passport Issue Date"@en ;
    rdfs:comment "Date when this Digital Product Passport was issued."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:dateIssued ;
    rdfs:seeAlso cirpass2:validFrom .

oec:passportStatus
    a owl:DatatypeProperty ;
    rdfs:label "Passport Status"@en ;
    rdfs:comment "Lifecycle status of this DPP (EN 18223 'dppStatus'): a lowercase string token (see oec:PassportStatus)."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    skos:note "EN 18223 'dppStatus'. Base values active/inactive/archived/invalid; EPCIS4DPP adds draft/withdrawn/suspended. cirpass2:dppStatus is the same JTC 24 member with a capitalized value enumeration, hence closeMatch rather than exactMatch."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:exactMatch dppk:dppStatus ;
    skos:closeMatch cirpass2:dppStatus .

oec:passportExpiryDate
    a owl:DatatypeProperty ;
    rdfs:label "Passport Expiry Date"@en ;
    rdfs:comment "Date when this Digital Product Passport expires or requires renewal."@en ;
    rdfs:range xsd:date ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR requires DPP data to remain available for a period defined in delegated acts."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso cirpass2:validUntil .

oec:hasPassportIssuer
    a owl:ObjectProperty ;
    rdfs:label "Passport Issuer"@en ;
    rdfs:comment "Economic operator responsible for issuing and maintaining this Digital Product Passport."@en ;
    rdfs:range oec:OperatorInformation ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Article 9 requires clear identification of the responsible economic operator."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:closeMatch schema:issuedBy ;
    rdfs:seeAlso cirpass2:hasIssuer .

oec:hasBackupCopyHost
    a owl:ObjectProperty ;
    rdfs:label "Backup Copy Host"@en ;
    rdfs:comment "Digital product passport service provider that holds the backup copy of this passport, ensuring availability if the primary host fails or the responsible economic operator ceases to exist."@en ;
    rdfs:range oec:OperatorInformation ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Art. 10(4) requires a backup copy of the passport to be available through a DPP service provider. Neither GS1, SEMICeu nor schema.org carries a backup-custodian role; schema:issuedBy names the issuer, not the fallback host."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso oec:hasPassportIssuer ;
    rdfs:seeAlso cirpass2:hasBackUpCopyHost ;
    skos:exactMatch <https://w3id.org/eudpp#hasBackUpCopyHost> .

oec:isEnergyRelated
    a owl:DatatypeProperty ;
    rdfs:label "Is Energy-Related Product"@en ;
    rdfs:comment "Whether the product is an energy-related product in the sense of the ESPR, i.e. a product with an impact on energy consumption during use."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:boolean ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR scope flag: energy-related products inherit the Ecodesign 2009/125/EC acquis and delegated acts may attach additional energy-performance requirements to them. No GS1, SEMICeu, or schema.org equivalent boolean exists."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso oec:energyEfficiencyClass ;
    rdfs:seeAlso cirpass2:isEnergyRelated ;
    skos:exactMatch <https://w3id.org/eudpp#isEnergyRelated> .

oec:previousPassportVersion
    a owl:DatatypeProperty ;
    rdfs:label "Previous Passport Version"@en ;
    rdfs:comment "Reference to the previous version of this passport, supporting version history per EN 18221."@en ;
    rdfs:range xsd:anyURI ;
    dcterms:source "EN 18221:2026 (CEN/CENELEC JTC 24)" ;
    skos:note "Supports the EN 18221 requirement that previous versions remain available."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso adms:prev ;
    skos:broadMatch schema:predecessorOf ;
    skos:exactMatch adms:prev ;
    rdfs:seeAlso cirpass2:linkToPreviousDPP ;
    skos:exactMatch <https://w3id.org/eudpp#linkToPreviousDPP> .

# =============================================================================
# Digital Product Passport envelope (EN 18223 information model)
# =============================================================================
# EN 18223:2026 (4.1.2.1) defines the DigitalProductPassport class and its
# attributes. EPCIS4DPP exposes the EN attribute names as JSON keys via the
# dpp-core context; the IRIs below are anchored to EN 18223.

oec:DigitalProductPassport
    a rdfs:Class ;
    rdfs:label "Digital Product Passport"@en ;
    rdfs:comment "The DPP envelope: identification and lifecycle metadata plus the product data elements, per the EN 18223 information model."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    skos:note "EN 18223 DigitalProductPassport. Attributes: digitalProductPassportId (oec:passportIdentifier), uniqueProductIdentifier, granularity (oec:granularityLevel), dppSchemaVersion, dppStatus (oec:passportStatus), lastUpdated, economicOperatorId, facilityId, contentSpecificationIds, plus product data elements."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch schema:DigitalDocument ;
    rdfs:seeAlso cirpass2:DPP ;
    skos:exactMatch <https://w3id.org/eudpp#DPP> .

# EN 18223 'uniqueProductIdentifier' maps to gs1:productID (the GS1 Digital
# Link) in the dpp-core context; no oec: term is minted (GS1-first governance).
# The Application Identifiers present in that Digital Link also determine
# oec:granularityLevel (01 model, 01+10 batch, 01+21 item).

oec:dppSchemaVersion
    a owl:DatatypeProperty ;
    rdfs:label "DPP Schema Version"@en ;
    rdfs:comment "The schema or standard version the DPP instance conforms to (EN 18223 'dppSchemaVersion'). Distinct from the content version oec:passportVersion."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch dppk:dppSchemaVersion ;
    skos:closeMatch schema:schemaVersion .

oec:facilityId
    a owl:DatatypeProperty ;
    rdfs:label "Facility Identifier"@en ;
    rdfs:comment "Identifier of a facility involved in the product's life cycle (EN 18223 'facilityId', formatted per EN 18219). In EPCIS4DPP a GLN. See oec:FacilityInformation for the richer facility record."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.1; EN 18219:2026 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    skos:exactMatch dppk:facilityId ;
    skos:broadMatch dppk:manufacturingFacility ;
    rdfs:seeAlso cirpass2:FacilityIdentifier ;
    rdfs:seeAlso cirpass2:hasUniqueFacilityIdentifier .

oec:contentSpecificationId
    a owl:DatatypeProperty ;
    rdfs:label "Content Specification Identifier"@en ;
    rdfs:comment "Reference to a horizontal or product-type content specification for the DPP (EN 18223 'contentSpecificationIds'). In EPCIS4DPP mirrors the declared GS1-Extensions namespaces."@en ;
    rdfs:domain oec:DigitalProductPassport ;
    rdfs:range xsd:anyURI ;
    dcterms:source "EN 18223:2026, 4.1.2.1 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:closeMatch dppk:contentSpecificationIds .

# =============================================================================
# DataElement model (EN 18223 4.1.2.3 to 4.1.2.8)
# =============================================================================
# EN 18223 wraps each product data point in a DataElement envelope with an
# elementId and an optional dictionaryReference to a data-dictionary definition.
# In EPCIS4DPP the dictionaryReference is a ref.openepcis.io term IRI;
# ref.openepcis.io is the EN 18223 4.3 data-dictionary repository.
# oec:DocumentReference serves as the EN 18223 RelatedResource (4.1.2.7); no
# separate RelatedResource class is minted.

oec:DataElement
    a rdfs:Class ;
    rdfs:label "Data Element"@en ;
    rdfs:comment "Abstract base for a DPP data point (EN 18223 4.1.2.3). Not used directly; see its subclasses."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.3 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:DataElementCollection
    a rdfs:Class ;
    rdfs:subClassOf oec:DataElement ;
    rdfs:label "Data Element Collection"@en ;
    rdfs:comment "A container of one or more DataElements (EN 18223 4.1.2.4)."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.4 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch schema:Dataset ;
    rdfs:seeAlso schema:Collection .

oec:SingleValuedDataElement
    a rdfs:Class ;
    rdfs:subClassOf oec:DataElement ;
    rdfs:label "Single-Valued Data Element"@en ;
    rdfs:comment "A single data point with one value (EN 18223 4.1.2.5)."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.5 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    rdfs:seeAlso schema:QuantitativeValue ;
    rdfs:seeAlso gs1:QuantitativeValue ;
    skos:broadMatch gs1:QuantitativeValue .

oec:MultiValuedDataElement
    a rdfs:Class ;
    rdfs:subClassOf oec:DataElement ;
    rdfs:label "Multi-Valued Data Element"@en ;
    rdfs:comment "An ordered list of DataElements of the same type (EN 18223 4.1.2.6)."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.6 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:MultiLanguageDataElement
    a rdfs:Class ;
    rdfs:subClassOf oec:DataElement ;
    rdfs:label "Multi-Language Data Element"@en ;
    rdfs:comment "A language-dependent data point carrying one or more language-tagged values (EN 18223 4.1.2.8)."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.8 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:MultiLanguageValue
    a rdfs:Class ;
    rdfs:label "Multi-Language Value"@en ;
    rdfs:comment "A language-tagged value: a string plus its language (EN 18223 4.1.2.8.2)."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.8.2 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch schema:StructuredValue .

oec:elementId
    a owl:DatatypeProperty ;
    rdfs:label "Element Id"@en ;
    rdfs:comment "Identifier of a DataElement, unique within its container (EN 18223 4.1.2.3)."@en ;
    rdfs:domain oec:DataElement ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.3 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:identifier ;
    skos:broadMatch schema:identifier .

oec:dictionaryReference
    a owl:DatatypeProperty ;
    rdfs:label "Dictionary Reference"@en ;
    rdfs:comment "Reference to the data-point definition in a data dictionary (EN 18223 4.1.2.3). In EPCIS4DPP a ref.openepcis.io term IRI; ref.openepcis.io is the EN 18223 4.3 data-dictionary repository."@en ;
    rdfs:domain oec:DataElement ;
    rdfs:range xsd:anyURI ;
    dcterms:source "EN 18223:2026, 4.1.2.3, 4.3 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch <https://w3id.org/eudpp#dictionaryReference> .

oec:valueDataType
    a owl:DatatypeProperty ;
    rdfs:label "Value Data Type"@en ;
    rdfs:comment "XSD data type of the value (EN 18223 4.1.2.9), for example \"xsd:integer\"."@en ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.9 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:value
    a rdf:Property ;
    rdfs:label "Value"@en ;
    rdfs:comment "The value of a SingleValuedDataElement or MultiLanguageValue (EN 18223 4.1.2.5, 4.1.2.8.2). Any JSON data type."@en ;
    dcterms:source "EN 18223:2026, 4.1.2.5 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:exactMatch untp:value ;
    rdfs:seeAlso schema:value ;
    rdfs:seeAlso schema:codeValue ;
    rdfs:seeAlso gs1:certificationValue ;
    rdfs:seeAlso cv:hasValue ;
    rdfs:seeAlso cv:value ;
    rdfs:seeAlso gs1:value ;
    rdfs:seeAlso cv:expressionOfExpectedValue ;
    rdfs:seeAlso gs1:originalCodeValue ;
    skos:broadMatch schema:textValue ;
    skos:broadMatch <https://gs1-epcis-reg.org/rail/voc/data#nominalValue> ;
    rdfs:seeAlso schema:maxValue ;
    skos:broadMatch gs1:authenticitySecurityFeatureValue ;
    skos:broadMatch schema:valueReference ;
    skos:broadMatch <https://gs1-epcis-reg.org/rail/voc/data#topValue> ;
    skos:broadMatch gs1:colourCodeValue ;
    skos:broadMatch <https://gs1-epcis-reg.org/rail/voc/data#rightValue> ;
    skos:broadMatch <https://gs1-epcis-reg.org/rail/voc/data#leftValueString> ;
    skos:broadMatch gs1:additionalProductClassificationValue ;
    skos:broadMatch <https://gs1-epcis-reg.org/rail/voc/data#rightValueString> .

oec:hasDataElement
    a owl:ObjectProperty ;
    rdfs:label "Data Element"@en ;
    rdfs:comment "Member DataElement of a DigitalProductPassport, DataElementCollection, or MultiValuedDataElement (EN 18223 4.1.2.4, 4.1.2.6)."@en ;
    rdfs:range oec:DataElement ;
    dcterms:source "EN 18223:2026, 4.1.2.4 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:itemListElement .

oec:hasMultiLanguageValue
    a owl:ObjectProperty ;
    rdfs:label "Multi-Language Value"@en ;
    rdfs:comment "A language-tagged value of a MultiLanguageDataElement (EN 18223 4.1.2.8)."@en ;
    rdfs:domain oec:MultiLanguageDataElement ;
    rdfs:range oec:MultiLanguageValue ;
    dcterms:source "EN 18223:2026, 4.1.2.8 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:language
    a owl:DatatypeProperty ;
    rdfs:label "Language"@en ;
    rdfs:comment "Language tag of a value (EN 18223 4.1.2.8.2): ISO 639 language plus EN ISO 3166-1 country, for example \"en-GB\"."@en ;
    rdfs:range xsd:string ;
    dcterms:source "EN 18223:2026, 4.1.2.8.2 (CEN/CENELEC JTC 24)" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:inLanguage ;
    skos:closeMatch gs1:fileLanguageCode ;
    skos:broadMatch schema:inLanguage ;
    skos:broadMatch schema:subtitleLanguage ;
    skos:broadMatch schema:availableLanguage .

# =============================================================================
# Properties - Digital Facility Record (DFR) Support
# =============================================================================

oec:activityClassification
    a owl:DatatypeProperty ;
    rdfs:label "Activity Classification"@en ;
    rdfs:comment "Industry/economic activity classification code (UN ISIC, EU NACE, US NAICS)."@en ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://unstats.un.org/unsd/classifications/Econ/isic> ;
    skos:note """Use standard classification codes: ISIC Rev.4, NACE Rev.2, or NAICS.
No domain restriction - can be used on OperatorInformation, FacilityInformation, or any entity.
Supports UNTP Digital Facility Record (DFR) activity classification requirements.

GS1 published this structure in July 2026 and now models it in two parts:
gs1:organizationClassification links a gs1:Organization to a
gs1:OrganizationClassificationDetails, which carries gs1:organizationClassificationID (the code)
alongside gs1:organizationClassificationType (the scheme the code belongs to). This property
carries only the code and conveys the scheme by convention, so the anchor is skos:closeMatch
rather than exactMatch. New models should prefer the GS1 structure; see
docs/VOCABULARY_LAYERING.md on redoing a term that upstream has since covered."""@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:closeMatch gs1:organizationClassificationID ;
    rdfs:seeAlso gs1:OrganizationClassificationDetails ;
    rdfs:seeAlso gs1:organizationClassificationType ;
    skos:narrowMatch schema:naics ;
    skos:narrowMatch schema:isicV4 ;
    rdfs:seeAlso <https://unstats.un.org/unsd/classifications/Econ/isic> .

# =============================================================================
# Properties - Digital Identity Anchor (DIA) Support
# =============================================================================

oec:did
    a owl:DatatypeProperty ;
    rdfs:label "Decentralized Identifier"@en ;
    rdfs:comment "DID (Decentralized Identifier) linking this entity to verifiable identity infrastructure."@en ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso <https://www.w3.org/TR/did-core/> ;
    rdfs:seeAlso <https://untp.unece.org/docs/specification/DigitalIdentityAnchor/> ;
    skos:note """Used to link traditional IDs (GLN, VAT, EOID) to DIDs per UNTP Digital Identity Anchor pattern.
No domain restriction - can be used on OperatorInformation, FacilityInformation, or any entity.
DID format: did:method:specific-identifier (e.g., did:web:example.com)."""@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:broadMatch schema:identifier .

oec:identityCredentialUrl
    a owl:DatatypeProperty ;
    rdfs:label "Identity Credential URL"@en ;
    rdfs:comment "URL to a verifiable credential proving identity (Digital Identity Anchor or similar)."@en ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso <https://untp.unece.org/docs/specification/DigitalIdentityAnchor/> ;
    rdfs:seeAlso <https://www.w3.org/TR/vc-data-model-2.0/> ;
    skos:note """Links to a VC issued by authoritative registry (chamber of commerce, tax authority)
proving DID-to-traditional-ID binding. Supports UNTP Digital Identity Anchor requirements.
No domain restriction - can be used on OperatorInformation, FacilityInformation, or any entity."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso gs1:referencedFileURL ;
    rdfs:seeAlso dppk:verifiableCredential .

# =============================================================================
# Individual Trade Item Piece (ITIP) - GS1 Application Identifier 8026
# =============================================================================
#
# Supports multi-piece trade items where a single GTIN is delivered as
# multiple physical pieces (e.g., a suit = jacket + trousers, furniture
# flat-pack sets, bundled electronics). Aligns with GS1 standardization
# GS1 ITIP (AI 8026) (ITIP identification of trade items packed in several
# individual pieces).
#
# AI 8026 encodes: GTIN + total piece count + this piece's number
# Reference: GS1 General Specifications section 3.9.17 (AI 8026)

oec:IndividualTradeItemPiece
    a rdfs:Class ;
    rdfs:label "Individual Trade Item Piece"@en ;
    rdfs:comment "A single physical piece of a multi-piece trade item, identified via GS1 AI 8026 (ITIP). Used when a single GTIN is composed of multiple individually-shipped pieces (e.g., a 2-piece suit, a furniture set)."@en ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    rdfs:seeAlso <https://www.gs1.org/standards/barcodes/application-identifiers/8026> ;
    skos:note "Reference pattern aligned with GS1 ITIP (AI 8026). The ITIP AI 8026 encodes GTIN + total piece count + piece number in one identifier."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:broadMatch schema:IndividualProduct .

oec:hasTradeItemPieces
    a owl:ObjectProperty ;
    rdfs:label "Trade Item Pieces"@en ;
    rdfs:comment "Links a multi-piece trade item to the individual pieces it is delivered as, each identified via GS1 AI 8026 (ITIP)."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:IndividualTradeItemPiece ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    skos:note "The GS1 Web Vocabulary publishes no property for the ITIP piece set: AI 8026 is an identification key in the GS1 General Specifications (section 3.9.17), and gs1:Product carries no piece-level part-whole property. This is the forward direction of oec:tradeItemPieceOf and the container the piece-level oec:tradeItemPiece* properties hang off."@en ;
    rdfs:seeAlso <https://www.gs1.org/standards/barcodes/application-identifiers/8026> ;
    rdfs:seeAlso schema:hasPart ;
    skos:broadMatch schema:hasPart ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:tradeItemPieceCount
    a owl:DatatypeProperty ;
    rdfs:label "Trade Item Piece Count"@en ;
    rdfs:comment "Total number of physical pieces that together constitute the complete trade item identified by the parent GTIN."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:positiveInteger ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    skos:note "Maps to the piece count component of GS1 AI 8026. For example, a 2-piece suit has tradeItemPieceCount = 2."@en ;
    rdfs:seeAlso <https://www.gs1.org/standards/barcodes/application-identifiers/8026> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:tradeItemPieceNumber
    a owl:DatatypeProperty ;
    rdfs:label "Trade Item Piece Number"@en ;
    rdfs:comment "The sequential number of this piece within the multi-piece trade item (1-based). For a 2-piece suit, the jacket might be piece 1 and trousers piece 2."@en ;
    rdfs:domain oec:IndividualTradeItemPiece ;
    rdfs:range xsd:positiveInteger ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    skos:note "Maps to the piece-number component of GS1 AI 8026. MUST be less than or equal to oec:tradeItemPieceCount on the parent product."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:tradeItemPieceOf
    a owl:ObjectProperty ;
    rdfs:label "Trade Item Piece Of"@en ;
    rdfs:comment "Links an individual piece to the multi-piece trade item (identified by its GTIN) it belongs to."@en ;
    rdfs:domain oec:IndividualTradeItemPiece ;
    rdfs:range gs1:Product ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    skos:note "Inverse relationship: a gs1:Product with oec:tradeItemPieceCount > 1 has multiple oec:IndividualTradeItemPiece members linked back via this property."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

oec:tradeItemPieceDescription
    a owl:DatatypeProperty ;
    rdfs:label "Trade Item Piece Description"@en ;
    rdfs:comment "Human-readable description of what this specific piece is (e.g., 'Jacket', 'Trousers', 'Left shoe', 'Instruction booklet')."@en ;
    rdfs:domain oec:IndividualTradeItemPiece ;
    rdfs:range xsd:string ;
    dcterms:source "https://ref.gs1.org/ai/8026" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:description ;
    rdfs:seeAlso gs1:productDescription ;
    rdfs:seeAlso gs1:offerDescription ;
    rdfs:seeAlso gs1:additionalProductDescription ;
    skos:broadMatch gs1:styleDescription ;
    skos:broadMatch gs1:productDescription .

# =============================================================================
# Customs Commodity Classification (shared across EU/US regulatory modules)
# =============================================================================
#
# No GS1 Web Vocabulary term exists for customs commodity codes (HS / CN /
# HTSUS). Multiple domain modules (eudr, detergent, electronics) need to
# carry these, so we define the property once here in core.

oec:CustomsCommodityCodeType
    a owl:Class ;
    rdfs:label "Customs Commodity Code Type"@en ;
    rdfs:comment "The classification system that a customs commodity code belongs to."@en ;
    owl:oneOf (
        oec:HS6
        oec:HS8
        oec:CN8
        oec:HTSUS10
        oec:CN10
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:TypeCode ;
    rdfs:seeAlso schema:CategoryCode ;
    rdfs:seeAlso cirpass2:ClassificationCode .

oec:HS6      a oec:CustomsCommodityCodeType ; rdfs:label "HS 6-digit (World Customs Organization Harmonized System)"@en .
oec:HS8      a oec:CustomsCommodityCodeType ; rdfs:label "HS 8-digit subheading"@en .
oec:CN8      a oec:CustomsCommodityCodeType ; rdfs:label "EU Combined Nomenclature 8-digit"@en .
oec:CN10     a oec:CustomsCommodityCodeType ; rdfs:label "EU Combined Nomenclature 10-digit (TARIC)"@en .
oec:HTSUS10  a oec:CustomsCommodityCodeType ; rdfs:label "US Harmonized Tariff Schedule 10-digit"@en .

oec:customsCommodityCode
    a owl:DatatypeProperty ;
    rdfs:label "Customs Commodity Code"@en ;
    rdfs:comment "A commodity code assigned to a trade item for customs classification. The coding system (HS / CN / HTSUS) is indicated by oec:hasCustomsCommodityCodeType on the same trade item. GS1 has no native property for this; tariffs and regulatory obligations across EU Combined Nomenclature, US HTSUS, and WCO HS all need it."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:string ;
    dcterms:source <https://www.wcoomd.org/en/topics/nomenclature.aspx> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso cirpass2:commodityCode .

oec:hasCustomsCommodityCodeType
    a owl:ObjectProperty ;
    rdfs:label "Customs Commodity Code Type"@en ;
    rdfs:comment "The classification system (HS, CN, HTSUS, etc.) used for oec:customsCommodityCode on the same trade item."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:CustomsCommodityCodeType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Regulation compliance flag
# =============================================================================
#
# GS1 Web Vocabulary defines gs1:regulatoryAct (the name of a regulation)
# but NO boolean compliance flag. Earlier EUDR examples erroneously cited
# gs1:isRegulationCompliant: that term does not exist in GS1. This core
# property fills that gap cleanly.

oec:isRegulationCompliant
    a owl:DatatypeProperty ;
    rdfs:label "Is Regulation Compliant"@en ;
    rdfs:comment "Asserts that a trade item complies with a specific regulatory act. Used inside a gs1:regulatoryInformation block alongside gs1:regulatoryAct. Replaces the non-existent gs1:isRegulationCompliant referenced in earlier drafts."@en ;
    rdfs:range xsd:boolean ;
    skos:note "This is a oec: extension because no GS1 Web Vocabulary term currently carries a boolean compliance assertion."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

oec:RegulationTypeCode-ESPR
    a gs1:RegulationTypeCode ;
    rdfs:label "Ecodesign for Sustainable Products Regulation (ESPR)"@en ;
    skos:prefLabel "ESPR" ;
    rdfs:comment """Regulation (EU) 2024/1781 establishing a framework for the setting
of ecodesign requirements for sustainable products (ESPR), replacing the
Ecodesign Directive 2009/125/EC. Use as the gs1:regulationType of a
gs1:RegulatoryInformation entry declaring compliance with ESPR or one of
its delegated acts. Cross-cuts every regulation module, hence owned by
common/core."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Core-owned member of the gs1:RegulationTypeCode code list: the upstream list has no ecodesign/ESPR entry. Candidate for upstream GS1 code-list submission."@en ;
    rdfs:seeAlso gs1:RegulationTypeCode-EFFICIENCY_OF_LAMPS_LUMINARIES .

oec:regulatoryActStatus
    a owl:DatatypeProperty ;
    rdfs:label "Regulatory Act Status"@en ;
    rdfs:comment "Status of a trade item with respect to a specific regulatory act (e.g. ACTIVE, EXEMPT, PENDING). Used inside a gs1:regulatoryInformation block alongside gs1:regulatoryAct."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "oec: extension: GS1 Web Vocabulary names a regulatory act (gs1:regulatoryAct) but carries no status of an item against that act. Replaces the non-existent gs1:regulatoryActStatus referenced in earlier drafts."@en ;
    rdfs:seeAlso gs1:regulatoryAct ;
    skos:relatedMatch gs1:regulatoryAct .

oec:regulatoryPermitIdentification
    a owl:DatatypeProperty ;
    rdfs:label "Regulatory Permit Identification"@en ;
    rdfs:comment "Identifier of a permit, authorisation, or type-examination certificate issued by a regulatory body for the trade item. Used inside a gs1:regulatoryInformation block."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "oec: extension: GS1 gs1:regulatoryIdentifier links to identifier groupings within a regulatory information system and gs1:regulatoryReferenceNumber is a reference number, neither of which is a literal permit identifier. Replaces the non-existent gs1:regulatoryPermitIdentification referenced in earlier drafts."@en ;
    rdfs:seeAlso gs1:regulatoryReferenceNumber, gs1:regulatoryIdentifier ;
    skos:closeMatch gs1:regulatoryReferenceNumber .

# =============================================================================
# Cross-Cutting EU Regulatory Concepts (lifted from per-module modules)
# =============================================================================
# These three concepts are missing from upstream vocabularies (UNTP v0.7.0,
# schema.org, GS1 Web Vocabulary) but appear identically in multiple EU regulations
# (PPWR 2025/40, WEEE 2012/19, Battery 2023/1542, ELV-revised, Detergent 2026/405,
# Textile-DA, Furniture-DA). Lift to common/core so each module just uses them.

# -----------------------------------------------------------------------------
# Extended Producer Responsibility (EPR)
# -----------------------------------------------------------------------------

oec:ExtendedProducerResponsibility
    a owl:Class ;
    rdfs:label "Extended Producer Responsibility"@en ;
    rdfs:comment """A registration of a producer's compliance with an Extended Producer
Responsibility (EPR) scheme for a specific waste stream and jurisdiction.
EPR schemes apply across PPWR (packaging), WEEE (electronics), Battery
Regulation, ELV (vehicles), Textile-DA (proposed), and others; every
regulation covered by this ontology. No upstream vocabulary defines this
class; UNTP v0.7.0 has no EPR-specific term, and CIRPASS-2 D3.2 confirms it
as a gap."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:eprRegistrationNumber
    a owl:DatatypeProperty ;
    rdfs:label "EPR Registration Number"@en ;
    rdfs:comment "Producer registration number issued by an EPR compliance scheme operator (e.g. Stiftung EAR for German WEEE, EcoEmballages for French packaging)."@en ;
    rdfs:domain oec:ExtendedProducerResponsibility ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:registryEntry ;
    skos:broadMatch gs1:regulatoryReferenceNumber .

oec:hasEprScheme
    a owl:ObjectProperty ;
    rdfs:label "EPR Scheme Operator"@en ;
    rdfs:comment "The Producer Responsibility Organisation (PRO) or competent authority that operates the EPR scheme. Modelled as a gs1:Organization or untp:Party."@en ;
    rdfs:domain oec:ExtendedProducerResponsibility ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasEprJurisdiction
    a owl:ObjectProperty ;
    rdfs:label "EPR Jurisdiction"@en ;
    rdfs:comment "The country / member state where this EPR registration applies. EPR schemes are organised per Member State; producers selling into multiple MS register in each."@en ;
    rdfs:domain oec:ExtendedProducerResponsibility ;
    rdfs:range gs1:Country ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:jurisdiction ;
    skos:broadMatch schema:jurisdiction .

oec:eprComplianceUrl
    a owl:DatatypeProperty ;
    rdfs:label "EPR Compliance URL"@en ;
    rdfs:comment "URL of the EPR scheme operator's public verification endpoint or compliance certificate for this producer."@en ;
    rdfs:domain oec:ExtendedProducerResponsibility ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:certificationAgencyURL .

oec:eprWasteStream
    a owl:DatatypeProperty ;
    rdfs:label "EPR Waste Stream"@en ;
    rdfs:comment "The waste stream the EPR registration covers: packaging, weee, batteries, vehicles, textiles, etc. Free-text token; controlled vocabulary may be added when EU publishes one."@en ;
    rdfs:domain oec:ExtendedProducerResponsibility ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasExtendedProducerResponsibility
    a owl:ObjectProperty ;
    rdfs:label "Extended Producer Responsibility"@en ;
    rdfs:comment "Links a product or operator to one or more EPR registrations covering it."@en ;
    rdfs:range oec:ExtendedProducerResponsibility ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# -----------------------------------------------------------------------------
# Bio-based / Biodegradability / Compostability
# -----------------------------------------------------------------------------
# Three distinct concepts often conflated. Bio-based = origin (renewable feedstock).
# Biodegradability = test result (microbial breakdown under conditions).
# Compostability = certification against a standard (EN 13432 / OK-Compost-Home /
# ASTM D6400): a regulatory-recognised category, not a measurement.

oec:bioBasedFraction
    a owl:DatatypeProperty ;
    rdfs:label "Bio-based Fraction"@en ;
    rdfs:comment "Mass fraction (0-1) of the product or material derived from renewable biological feedstock (rather than fossil-derived). Use unitCode 'P1' (UN/CEFACT Rec 20) when expressed via gs1:QuantitativeValue."@en ;
    rdfs:range xsd:decimal ;
    skos:note "Distinct from biodegradability (a separate test result) and compostability (a separate certification category)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:broadMatch untp:massFraction .

oec:Biodegradability
    a owl:Class ;
    rdfs:subClassOf schema:Observation ;
    rdfs:label "Biodegradability"@en ;
    rdfs:comment "An observed biodegradability result for a substance or material, typically per ISO 14593 / OECD 301B/D/F / OECD 310 test methods. Represents a measurement, not a regulatory category."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasBiodegradability
    a owl:ObjectProperty ;
    rdfs:label "Biodegradability"@en ;
    rdfs:comment "Links a product, material, or substance to its observed biodegradability result."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:Biodegradability ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Entry property for the oec:Biodegradability observation: without it the class and its oec:biodegradationPercentage / oec:hasBiodegradabilityTestMethod members are unreachable from the product. GS1 has no biodegradability property (gs1:consumerRecyclingInstructions is free text about recycling), SEMICeu has none, and schema.org offers only the generic schema:hasMeasurement."@en ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:seeAlso schema:hasMeasurement ;
    skos:broadMatch schema:hasMeasurement .

oec:hasCompostability
    a owl:ObjectProperty ;
    rdfs:label "Compostability"@en ;
    rdfs:comment "Links a product or material to its compostability classification and certification."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range oec:Compostability ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Entry property for the oec:Compostability category: without it the class and its oec:hasCompostabilityType / oec:compostabilityStandard members are unreachable from the product. CIRPASS-2 D3.2 confirmed compostability as a gap in published vocabulary; GS1 carries only the packaging label accreditation codes, not the classification itself."@en ;
    rdfs:seeAlso gs1:PackagingMarkedLabelAccreditationCode ;
    rdfs:seeAlso schema:hasCertification ;
    skos:broadMatch schema:hasCertification .

oec:biodegradationPercentage
    a owl:DatatypeProperty ;
    rdfs:label "Biodegradation Percentage"@en ;
    rdfs:comment "Percentage of substance biodegraded under the test method conditions. Use unitCode 'P1' (UN/CEFACT Rec 20) when expressed via gs1:QuantitativeValue."@en ;
    rdfs:domain oec:Biodegradability ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:BiodegradabilityTestMethod
    a owl:Class ;
    rdfs:label "Biodegradability Test Method"@en ;
    rdfs:comment "The standardised laboratory method used to assess biodegradability."@en ;
    owl:oneOf (
        oec:ISO14593
        oec:OECD301B
        oec:OECD301D
        oec:OECD301F
        oec:OECD310
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso cv:Criterion .

oec:ISO14593  a oec:BiodegradabilityTestMethod ; rdfs:label "ISO 14593 (CO2 evolution test)"@en .
oec:OECD301B  a oec:BiodegradabilityTestMethod ; rdfs:label "OECD 301B (CO2 evolution test)"@en .
oec:OECD301D  a oec:BiodegradabilityTestMethod ; rdfs:label "OECD 301D (closed bottle test)"@en .
oec:OECD301F  a oec:BiodegradabilityTestMethod ; rdfs:label "OECD 301F (manometric respirometry)"@en .
oec:OECD310   a oec:BiodegradabilityTestMethod ; rdfs:label "OECD 310 (sealed vessel CO2 evolution)"@en .

oec:hasBiodegradabilityTestMethod
    a owl:ObjectProperty ;
    rdfs:label "Biodegradability Test Method"@en ;
    rdfs:comment "The test method used to determine the biodegradability percentage."@en ;
    rdfs:domain oec:Biodegradability ;
    rdfs:range oec:BiodegradabilityTestMethod ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:measurementMethod .

oec:Compostability
    a owl:Class ;
    rdfs:label "Compostability"@en ;
    rdfs:comment "Compostability category and certification standard for a product or material. Distinct from biodegradability: compostability is a regulatory-recognised classification, not a continuous measurement."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:Certification .

oec:CompostabilityType
    a owl:Class ;
    rdfs:label "Compostability Type"@en ;
    rdfs:comment "Classification of how a product can be composted."@en ;
    owl:oneOf (
        oec:IndustrialCompostable
        oec:HomeCompostable
        oec:NotCompostable
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:IndustrialCompostable a oec:CompostabilityType ; rdfs:label "Industrially Compostable"@en ;
    rdfs:comment "Compostable in industrial composting facilities (typically per EN 13432)."@en .
oec:HomeCompostable       a oec:CompostabilityType ; rdfs:label "Home Compostable"@en ;
    rdfs:comment "Compostable in domestic composting conditions (typically per OK-Compost-Home / NF T 51-800)."@en .
oec:NotCompostable        a oec:CompostabilityType ; rdfs:label "Not Compostable"@en .

oec:hasCompostabilityType
    a owl:ObjectProperty ;
    rdfs:label "Compostability Type"@en ;
    rdfs:domain oec:Compostability ;
    rdfs:range oec:CompostabilityType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:compostabilityStandard
    a owl:DatatypeProperty ;
    rdfs:label "Compostability Standard"@en ;
    rdfs:comment "URI of the standard the compostability claim is certified against (e.g. EN 13432, OK-Compost-Home, ASTM D6400)."@en ;
    rdfs:domain oec:Compostability ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# -----------------------------------------------------------------------------
# Deposit-Return Scheme (DRS)
# -----------------------------------------------------------------------------

oec:DepositReturnScheme
    a owl:Class ;
    rdfs:subClassOf gs1:ReturnablePackageDepositDetails ;
    rdfs:label "Deposit-Return Scheme"@en ;
    rdfs:comment "A deposit-return scheme that the product participates in (PPWR Article 50, beverage container DRS in DE/AT/NL/SE/etc., and any future EU-harmonised DRS). Subclass of gs1:ReturnablePackageDepositDetails: instances carry the deposit amount and region via gs1:returnablePackageDepositAmount / gs1:returnablePackageDepositRegion and add the operator and redemption-channel data points GS1 does not model."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward as a subclass of gs1:ReturnablePackageDepositDetails."@en .

oec:hasDepositAmount
    a owl:ObjectProperty ;
    rdfs:label "Deposit Amount"@en ;
    rdfs:comment "Refundable deposit applied at point of sale. Modelled as gs1:QuantitativeValue with unitCode = ISO 4217 currency code (e.g. 'EUR'). Prefer the upstream gs1:returnablePackageDepositAmount (range gs1:PriceSpecification) where the GS1 packaging model is in use; this property remains for QuantitativeValue-based expressions."@en ;
    rdfs:domain oec:DepositReturnScheme ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists. closeMatch (not exactMatch) to gs1:returnablePackageDepositAmount: same meaning, different value structure (QuantitativeValue vs PriceSpecification)."@en ;
    skos:closeMatch gs1:returnablePackageDepositAmount ;
    rdfs:seeAlso schema:amount .

oec:hasDepositSchemeOperator
    a owl:ObjectProperty ;
    rdfs:label "Deposit Scheme Operator"@en ;
    rdfs:comment "The Producer Responsibility Organisation that operates the DRS (e.g. Pfand-System Deutschland for DE)."@en ;
    rdfs:domain oec:DepositReturnScheme ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Economic-operator / facility pattern per ESPR 2024/1781 Article 77. Anchored to SEMICeu CPOV / GS1 where applicable."@en ;
    skos:closeMatch schema:serviceOperator ;
    rdfs:seeAlso dppk:economicOperator ;
    skos:broadMatch dppk:economicOperator .

oec:depositRedemptionChannelUrl
    a owl:DatatypeProperty ;
    rdfs:label "Deposit Redemption Channel URL"@en ;
    rdfs:comment "URL of the public directory of redemption channels (where consumers can return the container for refund)."@en ;
    rdfs:domain oec:DepositReturnScheme ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:availableChannel .

oec:hasDepositReturnScheme
    a owl:ObjectProperty ;
    rdfs:label "Deposit-Return Scheme"@en ;
    rdfs:comment "Links a product (typically gs1:PackagingDetails) to the DRS it participates in. Where the GS1 packaging model is in use, prefer the upstream gs1:hasReturnablePackageDeposit (gs1:PackagingDetails → gs1:ReturnablePackageDepositDetails); since oec:DepositReturnScheme subclasses the GS1 target class, the same node works for both."@en ;
    rdfs:range oec:DepositReturnScheme ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:closeMatch gs1:hasReturnablePackageDeposit ;
    rdfs:seeAlso untp:referenceScheme ;
    rdfs:seeAlso untp:idScheme .

# =============================================================================
# UNTP v0.7.0 alignment
# =============================================================================
# UN/CEFACT Transparency Protocol (UNTP) Core Vocabulary v0.7.0 publishes the
# Party / Facility / Material / Claim / ConformityAttestation / ProductStatus /
# ProductIDGranularity classes. Anchor our equivalent oec: terms upward so
# tooling can recognise our vocabulary as UNTP-aligned. UNTP v0.7.0 is in
# formal public review (closes 2026-07-10); equivalences may evolve at v1.0.

oec:OperatorInformation skos:broadMatch untp:Party .

# =============================================================================
# schema.org alignment: energy & measurement
# =============================================================================
# schema.org explicitly cites carbon-footprint-by-authority as a use case for
# schema:hasMeasurement, and has dedicated EnergyConsumptionDetails / Certification
# classes. Anchor our terms upward where the semantic match is clean.

# =============================================================================
# Phase 2 lifts: additional cross-cutting concepts
# =============================================================================
# These classes formerly lived in module namespaces (eubat:, eutex:,
# euelec:, eudet:) where they were redundantly redefined. Lifted
# to oec: so every module reuses the same shape.

# -----------------------------------------------------------------------------
# Carbon Footprint Declaration with lifecycle stages
# (formerly eubat:CarbonFootprintDeclaration; same shape applies to textile,
#  electronics, ppwr, future Furniture-DA; aligns with EN 45552 / PEF /
#  ISO 14067)
# -----------------------------------------------------------------------------

oec:CarbonFootprintDeclaration
    a owl:Class ;
    rdfs:subClassOf schema:Observation ;
    rdfs:label "Carbon Footprint Declaration"@en ;
    rdfs:comment "An observation of a product's lifecycle carbon footprint, broken down by lifecycle stage. Used for EU Battery Annex II §8, ESPR carbon-footprint declarations, PEF reporting, and PPWR optional disclosures."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> ;
    skos:broadMatch <https://w3id.org/eudpp#CarbonFootprint> ;
    skos:broadMatch <https://w3id.org/eudpp#EnvironmentalFootprint> .

oec:hasCarbonFootprintRawMaterial
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint: Raw Material Acquisition"@en ;
    rdfs:comment "Lifecycle stage emissions from raw-material acquisition and pre-processing. gs1:QuantitativeValue with unitCode 'KGM' (kg CO2e) and oec:declaredFunctionalUnit set on the parent CarbonFootprintDeclaration."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> ;
    skos:broadMatch dppk:carbonFootprintAbsolute ;
    skos:broadMatch dppk:environmentalFootprint ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> .

oec:hasCarbonFootprintProduction
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint: Production"@en ;
    rdfs:comment "Lifecycle stage emissions from main product production. gs1:QuantitativeValue with unitCode 'KGM'."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    rdfs:seeAlso oec:carbonFootprintTotal ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> ;
    rdfs:seeAlso dppk:carbonFootprint ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> .

oec:hasCarbonFootprintDistribution
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint: Distribution"@en ;
    rdfs:comment "Lifecycle stage emissions from distribution and logistics. gs1:QuantitativeValue with unitCode 'KGM'."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    skos:broadMatch dppk:carbonFootprintAbsolute ;
    skos:broadMatch dppk:carbonFootprint ;
    skos:broadMatch dppk:environmentalFootprint ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> .

oec:hasCarbonFootprintUse
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint: Use Phase"@en ;
    rdfs:comment "Lifecycle stage emissions from product use. gs1:QuantitativeValue with unitCode 'KGM'."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> .

oec:hasCarbonFootprintEndOfLife
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint: End of Life"@en ;
    rdfs:comment "Lifecycle stage emissions from end-of-life and recycling. gs1:QuantitativeValue with unitCode 'KGM'."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    rdfs:seeAlso oec:carbonFootprintTotal ;
    rdfs:seeAlso dppk:carbonFootprintAbsolute ;
    rdfs:seeAlso dppk:carbonFootprint ;
    rdfs:seeAlso dppk:environmentalFootprint ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    skos:broadMatch dppk:carbonFootprintAbsolute ;
    skos:broadMatch dppk:carbonFootprint ;
    skos:broadMatch dppk:environmentalFootprint ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> .

oec:carbonFootprintMethodology
    a owl:DatatypeProperty ;
    rdfs:label "Carbon Footprint Methodology"@en ;
    rdfs:comment "URI of the methodology used (e.g. EN 45552, ISO 14067, PEF, GHG Protocol)."@en ;
    rdfs:domain oec:CarbonFootprintDeclaration ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en .

oec:hasCarbonFootprintDeclaration
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint Declaration"@en ;
    rdfs:comment "Links a product to its carbon footprint declaration."@en ;
    rdfs:range oec:CarbonFootprintDeclaration ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting carbon / emissions performance pattern aligned with ESPR 2024/1781 and the UN Transparency Protocol (UNTP)."@en ;
    skos:broadMatch dppk:environmentalFootprint .

# -----------------------------------------------------------------------------
# Recyclability Assessment
# (formerly eutex:RecyclabilityAssessment; PPWR uses recyclabilityGrade letter,
#  textile uses score, electronics uses rate, keep all three optional)
# -----------------------------------------------------------------------------

oec:RecyclabilityAssessment
    a owl:Class ;
    rdfs:subClassOf schema:Observation ;
    rdfs:label "Recyclability Assessment"@en ;
    rdfs:comment "An assessment of a product's recyclability. Different regulations express the same concept differently: PPWR uses letter grades A/B/C, the JRC textile methodology uses a 0-10 score, electronics WEEE uses a 0-1 rate. All three are optional; pick whichever your regulation requires."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:broadMatch cv:Criterion ;
    skos:broadMatch untp:ConformityAssessment .

oec:recyclabilityScore
    a owl:DatatypeProperty ;
    rdfs:label "Recyclability Score"@en ;
    rdfs:comment "Numeric recyclability score (e.g. 0-10 per JRC textile methodology). Use unitCode aligned with the methodology when expressed via gs1:QuantitativeValue."@en ;
    rdfs:domain oec:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:exactMatch dppk:recyclabilityScore .

oec:recyclabilityRate
    a owl:DatatypeProperty ;
    rdfs:label "Recyclability Rate"@en ;
    rdfs:comment "Decimal fraction (0-1) of the product that can be recycled."@en ;
    rdfs:domain oec:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:recyclabilityMethodology
    a owl:DatatypeProperty ;
    rdfs:label "Recyclability Methodology"@en ;
    rdfs:comment "URI of the recyclability methodology used (e.g. PEF, EN 15343, JRC textile preparatory study, PPWR Annex II)."@en ;
    rdfs:domain oec:RecyclabilityAssessment ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:recoverableRate
    a owl:DatatypeProperty ;
    rdfs:label "Recoverable Rate"@en ;
    rdfs:comment "Decimal fraction (0-1) of the product recoverable at end of life through any recovery operation (material recycling, energy recovery, backfilling)."@en ;
    rdfs:domain oec:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter: recoverability is broader than recyclability (oec:recyclabilityRate covers material recycling only; recovery adds energy recovery and backfilling per Waste Framework Directive Art. 3(15)). No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso oec:recyclabilityRate ;
    rdfs:seeAlso cirpass2:RecoverableRate .

oec:recyclingCollectionRate
    a owl:DatatypeProperty ;
    rdfs:label "Recycling Collection Rate"@en ;
    rdfs:comment "Decimal fraction (0-1) of products of this type actually collected for recycling, as reported for the applicable collection scheme."@en ;
    rdfs:domain oec:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter distinct from technical recyclability: a technically recyclable product may still have a low real-world collection rate. Cross-regulation (PPWR collection targets, Battery Regulation Art. 59, WEEE). No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso cirpass2:RecyclingCollectionRate .

oec:productToPackagingRatio
    a owl:DatatypeProperty ;
    rdfs:label "Product-to-Packaging Ratio"@en ;
    rdfs:comment "Ratio of product weight to total packaging weight, indicating packaging efficiency."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter; PPWR Annex IV minimisation assessments need the same figure. GS1 carries product and packaging weights separately (gs1:netWeight, gs1:packaging) but publishes no ratio term."@en ;
    rdfs:seeAlso gs1:netWeight ;
    rdfs:seeAlso cirpass2:ProductToPackagingRatio .

oec:wasteGenerationAmount
    a owl:DatatypeProperty ;
    rdfs:label "Waste Generation Amount"@en ;
    rdfs:comment "Quantity of waste generated over the product life cycle per declared unit, expressed in kilograms."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter (waste generation, including hazardous fractions). Life-cycle scoped like oec:carbonFootprintTotal, not an EN 15804 coded indicator, so carried as its own property rather than an oec:ImpactIndicatorType entry."@en ;
    rdfs:seeAlso cirpass2:WasteGenerationAmount ;
    rdfs:seeAlso cirpass2:HazardousWasteAmount .

oec:packagingWasteAmount
    a owl:DatatypeProperty ;
    rdfs:label "Packaging Waste Amount"@en ;
    rdfs:comment "Quantity of packaging waste generated per declared unit, expressed in kilograms."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter; PPWR reporting needs the same figure per packaging unit. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso oec:productToPackagingRatio ;
    rdfs:seeAlso cirpass2:PackagingWasteAmount .

oec:waterConsumption
    a owl:DatatypeProperty ;
    rdfs:label "Water Consumption"@en ;
    rdfs:comment "Net fresh water consumed over the product life cycle per declared unit, expressed in cubic metres."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter (water use). The EN 15804 indicator oec:WDP covers water-deprivation-weighted impact; this property carries the plain consumed volume the passport declares. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso oec:WDP ;
    rdfs:seeAlso cirpass2:WaterConsumption .

oec:landUse
    a owl:DatatypeProperty ;
    rdfs:label "Land Use"@en ;
    rdfs:comment "Land area occupied or transformed over the product life cycle per declared unit, expressed in square metres."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter; EUDR geolocation (eudr:) covers plot provenance while this carries the quantitative footprint. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso cirpass2:LandUse .

oec:materialFootprint
    a owl:DatatypeProperty ;
    rdfs:label "Material Footprint"@en ;
    rdfs:comment "Total raw material input mobilised over the product life cycle per declared unit, expressed in kilograms."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ESPR Annex I ecodesign parameter (resource use). Distinct from oec:hasMaterialComposition, which lists what is IN the product; the footprint counts what was consumed to make it. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso cirpass2:MaterialFootprint ;
    rdfs:seeAlso cirpass2:ResourceConsumption .

oec:hasRecyclabilityAssessment
    a owl:ObjectProperty ;
    rdfs:label "Recyclability Assessment"@en ;
    rdfs:comment "Links a product to its recyclability assessment."@en ;
    rdfs:range oec:RecyclabilityAssessment ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

# -----------------------------------------------------------------------------
# Energy Efficiency
# (formerly euelec:EnergyEfficiency; aligns with schema:EnergyConsumptionDetails;
#  used by ESPR Electronics, future Furniture-DA, HVAC, Tyres-DA)
# -----------------------------------------------------------------------------

oec:EnergyEfficiency
    a owl:Class ;
    rdfs:label "Energy Efficiency"@en ;
    rdfs:comment "A product's energy efficiency declaration: A-G class, EPREL registration, consumption modes."@en ;
    skos:broadMatch schema:EnergyConsumptionDetails ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:EUEnergyEfficiencyEnumeration ;
    skos:narrowMatch schema:EUEnergyEfficiencyEnumeration .

oec:EnergyEfficiencyClass
    a owl:Class ;
    rdfs:label "Energy Efficiency Class"@en ;
    rdfs:comment "A-G classification per EU Energy Labelling Regulation 2017/1369 and downstream delegated acts."@en ;
    owl:oneOf (
        oec:EnergyClassA
        oec:EnergyClassB
        oec:EnergyClassC
        oec:EnergyClassD
        oec:EnergyClassE
        oec:EnergyClassF
        oec:EnergyClassG
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch schema:EnergyEfficiencyEnumeration ;
    skos:broadMatch schema:EUEnergyEfficiencyEnumeration ;
    rdfs:seeAlso schema:EnergyConsumptionDetails ;
    rdfs:seeAlso schema:Class .

oec:EnergyClassA a oec:EnergyEfficiencyClass ; rdfs:label "Class A"@en ; skos:notation "A" .
oec:EnergyClassB a oec:EnergyEfficiencyClass ; rdfs:label "Class B"@en ; skos:notation "B" .
oec:EnergyClassC a oec:EnergyEfficiencyClass ; rdfs:label "Class C"@en ; skos:notation "C" .
oec:EnergyClassD a oec:EnergyEfficiencyClass ; rdfs:label "Class D"@en ; skos:notation "D" .
oec:EnergyClassE a oec:EnergyEfficiencyClass ; rdfs:label "Class E"@en ; skos:notation "E" .
oec:EnergyClassF a oec:EnergyEfficiencyClass ; rdfs:label "Class F"@en ; skos:notation "F" .
oec:EnergyClassG a oec:EnergyEfficiencyClass ; rdfs:label "Class G"@en ; skos:notation "G" .

oec:hasEnergyEfficiencyClass
    a owl:ObjectProperty ;
    rdfs:label "Energy Efficiency Class"@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range oec:EnergyEfficiencyClass ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:energyEfficiencyClass ;
    skos:exactMatch dppk:energyEfficiencyClass ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP and DPP Keystone (dppk:energyEfficiencyClass) where an equivalent exists."@en ;
    rdfs:seeAlso schema:energyEfficiencyScaleMin ;
    skos:closeMatch schema:hasEnergyEfficiencyCategory .

oec:hasAnnualEnergyConsumption
    a owl:ObjectProperty ;
    rdfs:label "Annual Energy Consumption"@en ;
    rdfs:comment "Annual energy consumption. gs1:QuantitativeValue with unitCode 'KWH'."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasPowerConsumptionOn
    a owl:ObjectProperty ;
    rdfs:label "Power Consumption: On Mode"@en ;
    rdfs:comment "Power consumed in active operating mode. gs1:QuantitativeValue with unitCode 'WTT'."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasPowerConsumptionStandby
    a owl:ObjectProperty ;
    rdfs:label "Power Consumption: Standby Mode"@en ;
    rdfs:comment "Power consumed in standby. gs1:QuantitativeValue with unitCode 'WTT'."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasPowerConsumptionOff
    a owl:ObjectProperty ;
    rdfs:label "Power Consumption: Off Mode"@en ;
    rdfs:comment "Power consumed in off mode. gs1:QuantitativeValue with unitCode 'WTT'."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch dppk:power ;
    skos:broadMatch dppk:ratedPower .

oec:eprelRegistrationNumber
    a owl:DatatypeProperty ;
    rdfs:label "EPREL Registration Number"@en ;
    rdfs:comment "EU EPREL (European Product Registry for Energy Labelling) registration number."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch gs1:regulatoryReferenceNumber ;
    skos:broadMatch schema:serialNumber .

oec:eprelProductUrl
    a owl:DatatypeProperty ;
    rdfs:label "EPREL Product URL"@en ;
    rdfs:comment "URL of the product's EPREL public page."@en ;
    rdfs:domain oec:EnergyEfficiency ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasEnergyEfficiency
    a owl:ObjectProperty ;
    rdfs:label "Energy Efficiency"@en ;
    rdfs:range oec:EnergyEfficiency ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:hasEnergyConsumptionDetails ;
    rdfs:seeAlso schema:energyEfficiencyScaleMax ;
    rdfs:seeAlso schema:energyEfficiencyScaleMin ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#remainingRoundTripEnergyEfficiency> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#roundTripEfficiencyFade> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#roundTripEfficiencyAt50PercentCycleLife> ;
    skos:narrowMatch dppk:roundTripEfficiencyAt50Cycles ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#roundTripEfficiencyFade> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#roundTripEfficiencyAt50PercentCycleLife> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#stateOfCertifiedEnergy> ;
    skos:narrowMatch dppk:roundTripEfficiencyInitial .

# -----------------------------------------------------------------------------
# End-of-Life Program
# (formerly eutex:hasTakeBackProgram + euelec:collectionSchemeUrl + eubat:hasEndOfLifeInfo)
# -----------------------------------------------------------------------------

oec:EndOfLifeProgram
    a owl:Class ;
    rdfs:label "End-of-Life Program"@en ;
    rdfs:comment "A take-back / collection / dismantling program operating across PPWR, WEEE, Battery, Textile take-back, and ELV. Distinct from EPR registration: EPR is the producer's compliance registration; this is the consumer-facing program with collection points, refunds, and dismantling guides."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:takeBackUrl
    a owl:DatatypeProperty ;
    rdfs:label "Take-Back URL"@en ;
    rdfs:comment "URL of the consumer-facing take-back program landing page."@en ;
    rdfs:domain oec:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso schema:merchantReturnLink ;
    skos:closeMatch schema:merchantReturnLink .

oec:takeBackIncentive
    a owl:DatatypeProperty ;
    rdfs:label "Take-Back Incentive"@en ;
    rdfs:comment "Free-text description of any consumer incentive (refund, credit, replacement)."@en ;
    rdfs:domain oec:EndOfLifeProgram ;
    rdfs:range rdf:langString ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:collectionPointDirectoryUrl
    a owl:DatatypeProperty ;
    rdfs:label "Collection Point Directory URL"@en ;
    rdfs:comment "URL of a directory of physical collection points."@en ;
    rdfs:domain oec:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    rdfs:seeAlso gs1:referencedFileURL ;
    skos:broadMatch schema:url ;
    skos:broadMatch gs1:referencedFileURL .

oec:dismantlingGuideUrl
    a owl:DatatypeProperty ;
    rdfs:label "Dismantling Guide URL"@en ;
    rdfs:comment "URL of the public dismantling / repair guide for end-of-life processors."@en ;
    rdfs:domain oec:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:hasEndOfLifeProgram
    a owl:ObjectProperty ;
    rdfs:label "End-of-Life Program"@en ;
    rdfs:range oec:EndOfLifeProgram ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

# -----------------------------------------------------------------------------
# CLP / GHS hazard communication enrichments on oec:HazardousSubstance
# (formerly eudet:SignalWord, eudet:hazardPictograms, eudet:hStatements,
#  eudet:pStatements; CLP Regulation 1272/2008)
# -----------------------------------------------------------------------------

oec:HazardSignalWord
    a owl:Class ;
    rdfs:label "Hazard Signal Word"@en ;
    rdfs:comment "CLP Regulation signal word: Danger or Warning."@en ;
    owl:oneOf (
        oec:HazardDanger
        oec:HazardWarning
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en .

oec:HazardDanger  a oec:HazardSignalWord ; rdfs:label "Danger"@en ; skos:notation "Danger" .
oec:HazardWarning a oec:HazardSignalWord ; rdfs:label "Warning"@en ; skos:notation "Warning" .

oec:hasHazardSignalWord
    a owl:ObjectProperty ;
    rdfs:label "Hazard Signal Word"@en ;
    rdfs:comment "CLP Regulation 1272/2008 signal word: Danger or Warning."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range oec:HazardSignalWord ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en .

oec:hazardPictogramCode
    a owl:DatatypeProperty ;
    rdfs:label "Hazard Pictogram Code"@en ;
    rdfs:comment "CLP/GHS pictogram code (GHS01..GHS09). Set-valued: a substance can carry multiple pictograms."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en .

oec:hazardStatement
    a owl:DatatypeProperty ;
    rdfs:label "Hazard Statement (H-statement)"@en ;
    rdfs:comment "CLP H-statement code (e.g. H315, H319). Set-valued: a substance can carry multiple H-statements."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32008R1272> ;
    skos:note "Substance-of-concern pattern aligned with CLP (EC) 1272/2008 and the ECHA SCIP database. Reusable across regulation modules."@en .

oec:precautionaryStatement
    a owl:DatatypeProperty ;
    rdfs:label "Precautionary Statement (P-statement)"@en ;
    rdfs:comment "CLP P-statement code (e.g. P101, P280). Set-valued."@en ;
    rdfs:domain oec:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Right-to-Repair Directive 2024/1799 enrichment
# =============================================================================
# Right-to-Repair adds two cross-cutting concepts beyond oec:RepairabilityInfo
# (which already covers score/class/sparePartsAvailability): a repair
# information portal URL (the manufacturer's public repair-data endpoint per
# Article 4) and a register of authorised repair providers.

oec:repairInformationPortalUrl
    a owl:DatatypeProperty ;
    rdfs:label "Repair Information Portal URL"@en ;
    rdfs:comment "URL of the manufacturer's public repair information portal as required by EU Right-to-Repair Directive 2024/1799 Article 4: covers spare-parts catalogue, dismantling guides, software updates available to independent repairers."@en ;
    rdfs:domain oec:RepairabilityInfo ;
    rdfs:range xsd:anyURI ;
    dcterms:source <https://eur-lex.europa.eu/eli/dir/2024/1799> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

oec:RepairProvider
    a owl:Class ;
    rdfs:label "Repair Provider"@en ;
    rdfs:comment "An authorised repair provider for a product. Supports the European online platform for repair (Article 7 of Directive 2024/1799) and manufacturer-published repair networks."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:broadMatch schema:AutoRepair ;
    skos:broadMatch schema:MotorcycleRepair .

oec:hasRepairProvider
    a owl:ObjectProperty ;
    rdfs:label "Repair Provider"@en ;
    rdfs:comment "Links a product to one or more authorised repair providers."@en ;
    rdfs:range oec:RepairProvider ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:broadMatch schema:provider .

oec:repairProviderName
    a owl:DatatypeProperty ;
    rdfs:label "Repair Provider Name"@en ;
    rdfs:domain oec:RepairProvider ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en ;
    skos:broadMatch schema:provider .

oec:repairProviderUrl
    a owl:DatatypeProperty ;
    rdfs:label "Repair Provider URL"@en ;
    rdfs:domain oec:RepairProvider ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting circularity pattern per ESPR 2024/1781 Article 7, reusable across regulation modules."@en .

# =============================================================================
# CSDDD 2024/1760 + Forced Labour 2024/3015 enrichment of DueDiligenceReport
# =============================================================================
# CSDDD (Corporate Sustainability Due Diligence Directive) and the Forced
# Labour Regulation both require supply-chain due diligence assertions. Same
# shape as Battery Annex X and EUDR Article 9, distinguished by which
# regulation is being asserted.

oec:hasDueDiligenceRegulationContext
    a owl:ObjectProperty ;
    rdfs:label "Due Diligence Regulation Context"@en ;
    rdfs:comment "The specific regulation against which a due diligence statement is asserted: Battery Annex X (Reg. 2023/1542), EUDR Article 9 (Reg. 2023/1115), CSDDD (Dir. 2024/1760), Forced Labour Regulation (2024/3015), OECD Conflict Minerals, etc. Same oec:DueDiligenceReport shape; different regulatory anchor."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range gs1:RegulatoryInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch cv:isDerivedFrom ;
    skos:closeMatch untp:regulation ;
    skos:closeMatch untp:referenceRegulation .

oec:supplyChainTransparencyUrl
    a owl:DatatypeProperty ;
    rdfs:label "Supply-Chain Transparency URL"@en ;
    rdfs:comment "URL of a public supply-chain map / transparency endpoint (CSDDD Article 16, ESPR Article 7)."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

oec:forcedLabourFreeAssertion
    a owl:DatatypeProperty ;
    rdfs:label "Forced-Labour-Free Assertion"@en ;
    rdfs:comment "Boolean assertion that the product is free of forced labour per EU Regulation 2024/3015. Substantiate with dueDiligenceReport URL + thirdPartyAssurance evidence."@en ;
    rdfs:domain oec:DueDiligenceReport ;
    rdfs:range xsd:boolean ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/3015> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en .

# =============================================================================
# Critical Raw Materials Act 2024/1252 enrichment
# =============================================================================
# CRMA distinguishes between "critical" and "strategic" materials and publishes
# an evolving list. The existing oec:isCriticalRawMaterial boolean covers the
# basic flag: these enrichments add the strategic flag and the list version.

oec:isStrategicRawMaterial
    a owl:DatatypeProperty ;
    rdfs:label "Is Strategic Raw Material"@en ;
    rdfs:comment "Boolean flag: material is on the EU Strategic Raw Materials list per CRMA Annex I (2024/1252). Strategic ⊂ Critical: every strategic raw material is also a critical raw material, but not vice versa."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:boolean ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1252> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#isCriticalRawMaterial> ;
    skos:broadMatch dppk:criticalRawMaterials ;
    skos:broader oec:isCriticalRawMaterial ;
    skos:broadMatch <https://w3id.org/eudpp#isCriticalRawMaterial> .

oec:crmListVersion
    a owl:DatatypeProperty ;
    rdfs:label "CRM List Version"@en ;
    rdfs:comment "Version reference of the EU Critical Raw Materials list against which the isCriticalRawMaterial / isStrategicRawMaterial flags were determined (e.g. CRMA-2024 Annex II / Annex I). The list is updated periodically by the Commission."@en ;
    rdfs:domain oec:MaterialComposition ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "Cross-cutting Digital Product Passport pattern under ESPR 2024/1781, reusable across regulation modules. Anchored upward to GS1/SEMICeu/schema.org/UNTP where an equivalent exists."@en ;
    skos:broadMatch untp:version ;
    skos:broadMatch dppk:dppSchemaVersion ;
    skos:broadMatch dppk:versionNumber .

# =============================================================================
# Cross-cutting refurbishment / remanufacturing
# =============================================================================
# Refurbishment and remanufacturing are explicitly named in ESPR 2024/1781
# Annex II (durability and reusability information) and recur across sectors:
# rail rolling stock, batteries (Battery Reg. 2023/1542), electronics (waste
# electrical and electronic equipment), and textile reuse. GS1 Web Vocabulary
# does not currently cover refurbishment dates, and SEMICeu has no equivalent.
# Sector vocabularies (e.g. rail:itemReconditioningDate) anchor upward to this
# property via the rail bridge in extensions/common/interop/.

oec:remanufacturingDate
    a owl:DatatypeProperty ;
    rdfs:label "Remanufacturing / refurbishment date"@en ;
    rdfs:comment "Date on which a product was remanufactured or refurbished and re-released as fit for purpose. Cross-sector: applies to any DPP-covered product that re-enters service after refurbishment (rail rolling stock, batteries, electronics, textiles)."@en ;
    rdfs:domain schema:Product ;
    rdfs:range xsd:dateTime ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "No upstream equivalent: GS1 Web Vocabulary covers production dates but not refurbishment; schema.org has schema:productionDate / schema:purchaseDate but no remanufacture/reconditioning date; SEMICeu does not cover product lifecycle dates."@en ;
    rdfs:seeAlso <https://gs1-epcis-reg.org/rail/voc/data#itemReconditioningDate> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:narrowMatch <https://gs1-epcis-reg.org/rail/voc/data#itemReconditioningDate> .

# =============================================================================
# Environmental Product Declaration (EN 15804:2012+A2:2019)
# =============================================================================
# A full EN 15804 EPD: a set of environmental impact indicators (GWP, ODP, AP,
# EP, POCP, ADP, WDP), each broken down over the EN 15804 lifecycle modules
# (A1-A5, B1-B7, C1-C4, D). Cross-cutting: construction (eu/cpr), iron & steel
# (eu/iron-steel), and any sector reporting a third-party-verified LCA reference
# the same structure. This complements the coarser oec:CarbonFootprintDeclaration
# (5 aggregate stages, GWP only) and the single-value oec:EmissionsPerformance.
# Modelled normalised (indicator result -> per-stage result) to avoid a flat
# explosion of indicator x stage properties. Anchored to the DPP Keystone EPD
# block (dppk:EPDBlock / dppk:ImpactValues), a peer DPP profile.

oec:EnvironmentalProductDeclaration
    a owl:Class ;
    rdfs:subClassOf schema:Certification ;
    rdfs:label "Environmental Product Declaration"@en ;
    rdfs:comment """A type III environmental declaration per EN 15804:2012+A2:2019 / ISO 14025,
reporting life-cycle environmental impact indicators broken down by lifecycle module."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso oec:EmissionsPerformance ;
    rdfs:seeAlso oec:CarbonFootprintDeclaration ;
    rdfs:seeAlso dppk:EPDBlock ;
    skos:note """Required extension: EN 15804 EPDs carry a full impact-indicator set with modular
lifecycle breakdown not covered by GS1 Web Vocabulary, schema.org, or SEMICeu. Aligned with
DPP Keystone dppk:EPDBlock (peer DPP profile). For a single aggregate carbon figure use
oec:carbonFootprintTotal; for a 5-stage carbon breakdown use oec:CarbonFootprintDeclaration."""@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> ;
    rdfs:seeAlso cirpass2:EPDStudy ;
    rdfs:seeAlso cirpass2:EPDDocument ;
    skos:exactMatch <https://w3id.org/eudpp#EPDDocument> .

oec:ImpactIndicatorResult
    a owl:Class ;
    rdfs:label "Impact Indicator Result"@en ;
    rdfs:comment """One environmental impact indicator (e.g. Global Warming Potential) reported within
an EPD: its indicator type, declared unit, aggregate value, and optional per-lifecycle-module values."""@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:ImpactValues ;
    skos:closeMatch dppk:ImpactValues ;
    skos:note "EN 15804 impact-indicator result. Anchored to DPP Keystone dppk:ImpactValues (peer DPP profile)."@en ;
    rdfs:seeAlso cirpass2:LCAResult ;
    skos:broadMatch <https://w3id.org/eudpp#ImpactCategoryIndicator> ;
    skos:broadMatch <https://w3id.org/eudpp#LcaResult> .

oec:LifecycleStageResult
    a owl:Class ;
    rdfs:label "Lifecycle Stage Result"@en ;
    rdfs:comment "The value of an impact indicator for a single EN 15804 lifecycle module (e.g. A1, B6, C3, D)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 modular lifecycle value. Pairs an oec:LifecycleStage code with a decimal value in the indicator's declared unit."@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> ;
    rdfs:seeAlso cirpass2:LCIAModuleValue ;
    skos:broadMatch <https://w3id.org/eudpp#LcaResult> .

# --- Impact indicator type enumeration (EN 15804+A2 core indicators) ---------

oec:ImpactIndicatorType
    a rdfs:Class ;
    rdfs:label "Impact Indicator Type"@en ;
    rdfs:comment "Controlled list of EN 15804:2012+A2:2019 environmental impact indicators."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804+A2 core impact category set."@en ;
    rdfs:seeAlso cirpass2:EN15804ImpactIndicator ;
    rdfs:seeAlso cirpass2:LCIAImpactIndicator ;
    skos:broadMatch <https://w3id.org/eudpp#ImpactType> ;
    skos:broadMatch <https://w3id.org/eudpp#ImpactCategory> .

oec:GWPTotal     a oec:ImpactIndicatorType ; rdfs:label "Global Warming Potential, total"@en ; skos:notation "GWP-total" ; rdfs:seeAlso dppk:gwp .
oec:GWPFossil    a oec:ImpactIndicatorType ; rdfs:label "Global Warming Potential, fossil"@en ; skos:notation "GWP-fossil" ; rdfs:seeAlso dppk:gwpF .
oec:GWPBiogenic  a oec:ImpactIndicatorType ; rdfs:label "Global Warming Potential, biogenic"@en ; skos:notation "GWP-biogenic" ; rdfs:seeAlso dppk:gwpB .
oec:GWPLuluc     a oec:ImpactIndicatorType ; rdfs:label "Global Warming Potential, land use and land-use change"@en ; skos:notation "GWP-luluc" ; rdfs:seeAlso dppk:gwpLuluc .
oec:ODP          a oec:ImpactIndicatorType ; rdfs:label "Depletion potential of the stratospheric ozone layer"@en ; skos:notation "ODP" ; rdfs:seeAlso dppk:odp .
oec:AP           a oec:ImpactIndicatorType ; rdfs:label "Acidification potential"@en ; skos:notation "AP" ; rdfs:seeAlso dppk:ap .
oec:EPFreshwater a oec:ImpactIndicatorType ; rdfs:label "Eutrophication potential, freshwater"@en ; skos:notation "EP-freshwater" ; rdfs:seeAlso dppk:epF .
oec:EPMarine     a oec:ImpactIndicatorType ; rdfs:label "Eutrophication potential, marine"@en ; skos:notation "EP-marine" ; rdfs:seeAlso dppk:epM .
oec:EPTerrestrial a oec:ImpactIndicatorType ; rdfs:label "Eutrophication potential, terrestrial"@en ; skos:notation "EP-terrestrial" ; rdfs:seeAlso dppk:epT .
oec:POCP         a oec:ImpactIndicatorType ; rdfs:label "Formation potential of tropospheric ozone"@en ; skos:notation "POCP" ; rdfs:seeAlso dppk:pocp .
oec:ADPElements  a oec:ImpactIndicatorType ; rdfs:label "Abiotic depletion potential, minerals and metals"@en ; skos:notation "ADP-minerals&metals" ; rdfs:seeAlso dppk:adpe .
oec:ADPFossil    a oec:ImpactIndicatorType ; rdfs:label "Abiotic depletion potential, fossil resources"@en ; skos:notation "ADP-fossil" ; rdfs:seeAlso dppk:adpf .
oec:WDP          a oec:ImpactIndicatorType ; rdfs:label "Water (user) deprivation potential"@en ; skos:notation "WDP" ; rdfs:seeAlso dppk:wdp .

# --- Lifecycle stage enumeration (EN 15804 modules A1-A5, B1-B7, C1-C4, D) ----

oec:LifecycleStage
    a rdfs:Class ;
    rdfs:label "Lifecycle Stage"@en ;
    rdfs:comment "Controlled list of EN 15804 lifecycle modules (product, construction, use, end-of-life, and benefits beyond the system boundary)."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 modular lifecycle stages."@en ;
    rdfs:seeAlso cirpass2:LifeCycleModule .

oec:StageA1 a oec:LifecycleStage ; rdfs:label "A1 Raw material supply"@en ; skos:notation "A1" ; rdfs:seeAlso dppk:a1 .
oec:StageA2 a oec:LifecycleStage ; rdfs:label "A2 Transport to manufacturer"@en ; skos:notation "A2" ; rdfs:seeAlso dppk:a2 .
oec:StageA3 a oec:LifecycleStage ; rdfs:label "A3 Manufacturing"@en ; skos:notation "A3" ; rdfs:seeAlso dppk:a3 .
oec:StageA4 a oec:LifecycleStage ; rdfs:label "A4 Transport to site"@en ; skos:notation "A4" ; rdfs:seeAlso dppk:a4 .
oec:StageA5 a oec:LifecycleStage ; rdfs:label "A5 Installation"@en ; skos:notation "A5" ; rdfs:seeAlso dppk:a5 .
oec:StageB1 a oec:LifecycleStage ; rdfs:label "B1 Use"@en ; skos:notation "B1" ; rdfs:seeAlso dppk:b1 .
oec:StageB2 a oec:LifecycleStage ; rdfs:label "B2 Maintenance"@en ; skos:notation "B2" ; rdfs:seeAlso dppk:b2 .
oec:StageB3 a oec:LifecycleStage ; rdfs:label "B3 Repair"@en ; skos:notation "B3" ; rdfs:seeAlso dppk:b3 .
oec:StageB4 a oec:LifecycleStage ; rdfs:label "B4 Replacement"@en ; skos:notation "B4" ; rdfs:seeAlso dppk:b4 .
oec:StageB5 a oec:LifecycleStage ; rdfs:label "B5 Refurbishment"@en ; skos:notation "B5" ; rdfs:seeAlso dppk:b5 .
oec:StageB6 a oec:LifecycleStage ; rdfs:label "B6 Operational energy use"@en ; skos:notation "B6" ; rdfs:seeAlso dppk:b6 .
oec:StageB7 a oec:LifecycleStage ; rdfs:label "B7 Operational water use"@en ; skos:notation "B7" ; rdfs:seeAlso dppk:b7 .
oec:StageC1 a oec:LifecycleStage ; rdfs:label "C1 Deconstruction / demolition"@en ; skos:notation "C1" ; rdfs:seeAlso dppk:c1 .
oec:StageC2 a oec:LifecycleStage ; rdfs:label "C2 Transport to waste processing"@en ; skos:notation "C2" .
oec:StageC3 a oec:LifecycleStage ; rdfs:label "C3 Waste processing"@en ; skos:notation "C3" .
oec:StageC4 a oec:LifecycleStage ; rdfs:label "C4 Disposal"@en ; skos:notation "C4" .
oec:StageD  a oec:LifecycleStage ; rdfs:label "D Benefits and loads beyond the system boundary"@en ; skos:notation "D" .

# --- EPD properties -----------------------------------------------------------

oec:hasEnvironmentalProductDeclaration
    a owl:ObjectProperty ;
    rdfs:label "Environmental Product Declaration"@en ;
    rdfs:comment "Links a product to its EN 15804 environmental product declaration."@en ;
    rdfs:range oec:EnvironmentalProductDeclaration ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:epd ;
    skos:exactMatch dppk:epd ;
    skos:note "EN 15804 EPD link. Anchored to DPP Keystone dppk:epd (peer DPP profile)."@en .

oec:epdRegistrationNumber
    a owl:DatatypeProperty ;
    rdfs:label "EPD Registration Number"@en ;
    rdfs:comment "Registration / declaration number assigned by the EPD programme operator."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 / ISO 14025 EPD metadata."@en ;
    skos:broadMatch gs1:regulatoryReferenceNumber ;
    rdfs:seeAlso cirpass2:registrationNumber .

oec:productCategoryRules
    a owl:DatatypeProperty ;
    rdfs:label "Product Category Rules"@en ;
    rdfs:comment "URI of the Product Category Rules (PCR) or Product Environmental Footprint Category Rules (PEFCR) document under which the environmental declaration was produced."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "ISO 14025 / EN 15804 EPD metadata: results are only comparable within one PCR/PEFCR, so the passport must say which one applies. No GS1, SEMICeu, or schema.org equivalent."@en ;
    rdfs:seeAlso cirpass2:PCR ;
    rdfs:seeAlso cirpass2:PEFCR ;
    rdfs:seeAlso cirpass2:referenceToPCR ;
    rdfs:seeAlso cirpass2:referenceToPEFCR ;
    skos:narrowMatch <https://w3id.org/eudpp#referenceToPEFCR> .

oec:epdProgramOperator
    a owl:DatatypeProperty ;
    rdfs:label "EPD Programme Operator"@en ;
    rdfs:comment "Name of the EPD programme operator (e.g. EPD International, IBU, EcoPlatform)."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 / ISO 14025 EPD metadata."@en ;
    skos:broadMatch <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#operatorInformation> .

oec:epdStandard
    a owl:DatatypeProperty ;
    rdfs:label "EPD Reference Standard"@en ;
    rdfs:comment "Reference standard and product category rules version used (e.g. EN 15804+A2)."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 / ISO 14025 EPD metadata."@en .

oec:epdValidUntil
    a owl:DatatypeProperty ;
    rdfs:label "EPD Valid Until"@en ;
    rdfs:comment "Date until which the EPD is valid."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 / ISO 14025 EPD metadata."@en ;
    skos:exactMatch schema:validUntil ;
    skos:broadMatch schema:validThrough ;
    rdfs:seeAlso cirpass2:expiryDate .

oec:hasImpactIndicator
    a owl:ObjectProperty ;
    rdfs:label "Impact Indicator"@en ;
    rdfs:comment "An environmental impact indicator result reported within the EPD."@en ;
    rdfs:domain oec:EnvironmentalProductDeclaration ;
    rdfs:range oec:ImpactIndicatorResult ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso dppk:indicator ;
    skos:note "EN 15804 impact indicator. Anchored to DPP Keystone dppk:indicator (peer DPP profile)."@en .

oec:hasIndicatorType
    a owl:ObjectProperty ;
    rdfs:label "Indicator Type"@en ;
    rdfs:comment "The EN 15804 impact category this result reports (e.g. oec:GWPTotal)."@en ;
    rdfs:domain oec:ImpactIndicatorResult ;
    rdfs:range oec:ImpactIndicatorType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804+A2 impact category selector."@en .

oec:indicatorUnit
    a owl:DatatypeProperty ;
    rdfs:label "Indicator Unit"@en ;
    rdfs:comment "Declared unit for this indicator (e.g. kg CO2 eq, kg CFC11 eq, mol H+ eq, m3 world eq deprived)."@en ;
    rdfs:domain oec:ImpactIndicatorResult ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 declared characterisation unit for the indicator."@en ;
    skos:closeMatch gs1:unitCode .

oec:indicatorTotalValue
    a owl:DatatypeProperty ;
    rdfs:label "Indicator Total Value"@en ;
    rdfs:comment "Aggregate value of the indicator across the declared lifecycle modules, in the declared unit."@en ;
    rdfs:domain oec:ImpactIndicatorResult ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 aggregate indicator value. Use oec:hasLifecycleStageResult for the modular breakdown."@en ;
    rdfs:seeAlso gs1:value ;
    rdfs:seeAlso schema:value .

oec:hasLifecycleStageResult
    a owl:ObjectProperty ;
    rdfs:label "Lifecycle Stage Result"@en ;
    rdfs:comment "A single EN 15804 module value contributing to this indicator."@en ;
    rdfs:domain oec:ImpactIndicatorResult ;
    rdfs:range oec:LifecycleStageResult ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 modular lifecycle breakdown."@en ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> .

oec:hasLifecycleStage
    a owl:ObjectProperty ;
    rdfs:label "Lifecycle Stage"@en ;
    rdfs:comment "The EN 15804 lifecycle module this value applies to (e.g. oec:StageA1)."@en ;
    rdfs:domain oec:LifecycleStageResult ;
    rdfs:range oec:LifecycleStage ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:note "EN 15804 module selector."@en ;
    skos:closeMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#lifecycleStage> ;
    rdfs:seeAlso cirpass2:hasLifeCycleStage .

oec:stageValue
    a owl:DatatypeProperty ;
    rdfs:label "Stage Value"@en ;
    rdfs:comment "Indicator value for this lifecycle module, in the indicator's declared unit."@en ;
    rdfs:domain oec:LifecycleStageResult ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    rdfs:seeAlso schema:value ;
    skos:note "EN 15804 modular value. DPP Keystone expresses these as flat dppk:a1..dppk:d properties; here normalised as oec:LifecycleStage + oec:stageValue pairs."@en ;
    rdfs:seeAlso gs1:value ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#remainingPowerCapabilityValue> ;
    skos:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#evolutionOfSelfDischargeValue> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#numberOfFullCyclesValue> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#remainingCapacityValue> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#capacityThroughputValue> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.Performance:1.2.1#internalResistanceIncreaseValue> ;
    skos:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#energyThroughputValue> ;
    skos:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#remainingEnergyValue> ;
    skos:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#capacityFadeValue> ;
    skos:broadMatch cv:value .
