@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 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:warranty with gs1:WarrantyPromise
- 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.7" ;
    owl:versionIRI <https://ref.openepcis.io/extensions/common/core/0.9.7> ;
    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 cv: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) cv:LegalEntity in the EU SEMICeu Core
Business Vocabulary. The two extensions overlap but neither contains the other:
cv: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 cv: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:narrowMatch schema:Organization ;
    skos:closeMatch gs1:OrganizationID_Details ;
    skos:narrowMatch gs1:Organization ;
    rdfs:seeAlso dppk:EconomicOperatorRole ;
    skos:narrowMatch cirpass2:Actor ;
    skos:broadMatch cirpass2:ManufacturerRecord ;
    skos:narrowMatch cv:LegalEntity .

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:narrowMatch schema:Report ;
    skos:narrowMatch 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 .

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:narrowMatch schema:ChemicalSubstance ;
    skos:narrowMatch schema: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:broadMatch 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:narrowMatch 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:exactMatch oec:MaterialComposition ;
    skos:broadMatch gs1:TextileMaterialDetails ;
    skos:broadMatch gs1:PackagingMaterialDetails .

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:narrowMatch schema:Place ;
    skos:narrowMatch gs1:Place ;
    rdfs:seeAlso cv:InformationConcept .

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:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#HazardousSubstanceEntity> ;
    skos:narrowMatch schema:ChemicalSubstance ;
    skos:narrowMatch schema: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:warranty ;
    rdfs:seeAlso cirpass2:Durability ;
    rdfs:seeAlso cirpass2:Reliability ;
    skos:note """Required extension: GS1 provides gs1:warranty 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:warranty 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:warranty ;
    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 .

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 .

# =============================================================================
# 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/> ;
    skos:broadMatch schema:OrganizationRole ;
    skos:exactMatch cirpass2:EconomicOperatorRole .

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 .
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 .

# =============================================================================
# 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:narrowMatch schema:StatusEnumeration .

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 .

# =============================================================================
# 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:reportingGranularity
    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:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#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:Packaging
        oec:FoodContact
        oec:IronSteel
        oec:Aluminium
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:narrowMatch gs1:Product ;
    skos:narrowMatch schema:CategoryCode ;
    skos:narrowMatch schema:Product ;
    skos:closeMatch gs1:FoodBeverageTobaccoProduct ;
    skos:broadMatch 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: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:broadMatch 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 .
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 .
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 .

# =============================================================================
# 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/> .

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:operatorInformation
    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:broadMatch 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:operatorRole
    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 .

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:narrowMatch gs1:registryEntry ;
    skos:narrowMatch gs1:regulatoryReferenceNumber ;
    skos:narrowMatch schema:companyRegistration .

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

oec:dueDiligenceReport
    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> .

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:verificationBody
    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 .

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

oec:hazardousSubstances
    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 .

oec:hazardClass
    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 .

oec:iupacName
    a owl:DatatypeProperty ;
    rdfs:label "IUPAC Name"@en ;
    rdfs:comment "Systematic IUPAC chemical name of the substance, complementing the CAS/EC registry numbers."@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> ;
    rdfs:seeAlso dppk:componentIupacName ;
    skos:closeMatch dppk:componentIupacName ;
    skos:note "Required extension: GS1 Web Vocabulary has no IUPAC-name property. Anchored to DPP Keystone dppk:componentIupacName (peer DPP profile) for interoperability."@en ;
    skos:exactMatch schema:iupacName .

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> .

oec:hazardImpact
    a owl:DatatypeProperty ;
    rdfs:label "Hazard Impact"@en ;
    rdfs:comment "Description of the hazard impact."@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 .

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

oec:documents
    a owl:ObjectProperty ;
    rdfs:label "Documents"@en ;
    rdfs:comment "Supporting documents for the product."@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 .

oec:documentType
    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 oec:documentType ;
    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:narrowMatch 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 oec:mimeType ;
    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:narrowMatch 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 .

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

oec:circularityPerformance
    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:narrowMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#endOfLifeInformation> ;
    skos:narrowMatch gs1:instructions ;
    skos:narrowMatch 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:narrowMatch 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:narrowMatch gs1:sustainabilityInfo .

oec:dismantlingInstructions
    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 ;
    skos:exactMatch oec:dismantlingInstructions ;
    rdfs:seeAlso dppk:dismantlingInformation ;
    skos:exactMatch dppk:disassemblyInstructions ;
    skos:broadMatch <urn:samm:io.BatteryPass.Circularity:1.2.0#dismantlingAndRemovalInformation> ;
    skos:narrowMatch 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:narrowMatch 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 ;
    skos:broadMatch oec:recyclabilityScore ;
    rdfs:seeAlso oec:recyclabilityAssessment .

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

oec:recycledContentDetails
    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 .

# 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> ;
    skos:exactMatch oec:recycledContent ;
    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 .

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:materialComposition
    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 .

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> .

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 .

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 ;
    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:broadMatch gs1:additiveName ;
    skos:narrowMatch 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:narrowMatch schema:identifier ;
    skos:broadMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#batteryMaterialIdentifier> ;
    skos:exactMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#componentId> ;
    skos:narrowMatch adms:identifier .

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

oec:emissionsPerformance
    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:carbonFootprint
    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:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    skos:broadMatch <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:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:exactMatch oec:carbonFootprintTotal ;
    skos:broadMatch oec:carbonFootprintProduction ;
    skos:broadMatch <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:narrowMatch gs1:unitCode .

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:exactMatch oec:carbonFootprintStudyUrl ;
    skos:narrowMatch gs1:referencedFileURL .

oec:operationalScope
    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 oec:lastDataUpdate ;
    skos:exactMatch <urn:samm:io.BatteryPass.Performance:1.2.1#lastUpdate> ;
    skos:exactMatch dppk: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:exactMatch oec:dataProviderCertification ;
    skos:narrowMatch schema:hasCertification ;
    skos:narrowMatch gs1:certification .

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

oec:traceabilityPerformance
    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/> .

# =============================================================================
# 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 .

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:narrowMatch gs1:regulatoryReferenceNumber .

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

oec:facilityInformation
    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:facilityCertifications
    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:narrowMatch gs1:certification ;
    skos:narrowMatch schema:hasCertification ;
    skos:narrowMatch gs1:certificationInfo ;
    rdfs:seeAlso gs1:certificationIdentification .

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

oec:substancesOfConcern
    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> .

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 ;
    skos:exactMatch oec:ecNumber .

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:narrowMatch 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 .

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:narrowMatch gs1:consumerUsageInstructions ;
    skos:narrowMatch gs1:instructions ;
    skos:narrowMatch gs1:instructionsForUse ;
    skos:narrowMatch dppk:instructionsForUse ;
    skos:narrowMatch 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:narrowMatch gs1:instructions .

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

oec:performanceInfo
    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:expectedLifespan
    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:broadMatch <urn:samm:io.BatteryPass.Performance:1.2.1#expectedLifetime> .

oec:guaranteedLifespan
    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:narrowMatch <urn:samm:io.BatteryPass.Performance:1.2.1#batteryCondition> .

oec:technicalLifetime
    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> ;
    skos:narrowMatch <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:energyEfficiencyClass ;
    rdfs:seeAlso schema:energyEfficiencyScaleMax .

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:repairabilityInfo
    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 ;
    skos:exactMatch oec:repairabilityClass .

oec:sparePartsAvailability
    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:repairInstructions
    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:narrowMatch gs1:instructions ;
    rdfs:seeAlso gs1:serviceInfo ;
    skos:narrowMatch gs1:serviceInfo .

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:softwareUpdatesAvailability
    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:accessRights
    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:accessLevel
    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 ;
    skos:narrowMatch schema:conditionsOfAccess .

oec:authorizedParties
    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:dataRetentionPeriod
    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:productCategory
    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:narrowMatch schema:category ;
    skos:narrowMatch 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:narrowMatch schema:identifier ;
    skos:broadMatch <urn:samm:io.BatteryPass.GeneralProductInformation:1.2.0#batteryPassportIdentifier> .

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 .

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."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> ;
    skos:exactMatch dppk: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/> .

oec:passportIssuer
    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:narrowMatch schema:issuedBy .

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:narrowMatch schema:predecessorOf ;
    skos:exactMatch adms:prev .

# =============================================================================
# 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:narrowMatch schema:DigitalDocument .

# 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 .

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:narrowMatch schema:Dataset ;
    skos:narrowMatch 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 .

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:narrowMatch 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:narrowMatch 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 .

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> ;
    skos:broadMatch 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:dataElement
    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:multiLanguageValue
    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:narrowMatch schema:inLanguage ;
    skos:narrowMatch 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."""@en ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> ;
    skos:broadMatch schema:naics ;
    skos:broadMatch schema:isicV4 ;
    skos:broadMatch <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:narrowMatch 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 ;
    skos:narrowMatch 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:narrowMatch schema:IndividualProduct .

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/> ;
    skos:closeMatch schema:clipNumber ;
    skos:closeMatch schema:episodeNumber .

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:narrowMatch schema:description ;
    rdfs:seeAlso gs1:productDescription ;
    rdfs:seeAlso gs1:offerDescription ;
    rdfs:seeAlso gs1:additionalProductDescription .

# =============================================================================
# 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 .

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:customsCommodityCodeType 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 .

oec:customsCommodityCodeType
    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: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:narrowMatch gs1:regulatoryReferenceNumber .

oec:eprScheme
    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:eprJurisdiction
    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:exactMatch oec:eprJurisdiction ;
    skos:narrowMatch 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:narrowMatch 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:extendedProducerResponsibility
    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> .

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: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 ;
    skos:narrowMatch 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:biodegradabilityTestMethod
    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:narrowMatch 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 .

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:compostabilityType
    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:label "Deposit-Return Scheme"@en ;
    rdfs:comment "A deposit-return scheme that the product participates in (PPWR Article 13, beverage container DRS in DE/AT/NL/SE/etc., and any future EU-harmonised DRS)."@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:closeMatch gs1:ReturnablePackageDepositDetails .

oec:depositAmount
    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')."@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."@en ;
    skos:exactMatch gs1:returnablePackageDepositAmount ;
    rdfs:seeAlso schema:amount .

oec:depositSchemeOperator
    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 .

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 ;
    skos:narrowMatch schema:availableChannel .

oec:depositReturnScheme
    a owl:ObjectProperty ;
    rdfs:label "Deposit-Return Scheme"@en ;
    rdfs:comment "Links a product (typically gs1:PackagingDetails) to the DRS it participates in."@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 ;
    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:narrowMatch 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 ;
    skos:broadMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#CarbonFootprintPerLifecycleStageEntity> .

oec:carbonFootprintRawMaterial
    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 ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    rdfs:seeAlso <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> .

oec:carbonFootprintProduction
    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 ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#batteryCarbonFootprint> ;
    skos:narrowMatch oec:carbonFootprintTotal ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#absoluteCarbonFootprint> ;
    skos:narrowMatch dppk:carbonFootprint .

oec:carbonFootprintDistribution
    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 ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> .

oec:carbonFootprintUse
    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 ;
    skos:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprint> .

oec:carbonFootprintEndOfLife
    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:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#carbonFootprintPerLifecycleStage> ;
    skos:narrowMatch oec:carbonFootprintTotal ;
    rdfs:seeAlso dppk:carbonFootprintAbsolute ;
    rdfs:seeAlso dppk:carbonFootprint ;
    rdfs:seeAlso dppk:environmentalFootprint .

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:carbonFootprintDeclaration
    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:exactMatch oec:carbonFootprintDeclaration .

# -----------------------------------------------------------------------------
# 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:narrowMatch cv:Criterion ;
    skos:narrowMatch 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:recyclabilityAssessment
    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 ;
    skos:exactMatch oec:recyclabilityAssessment .

# -----------------------------------------------------------------------------
# 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:narrowMatch 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 .

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:narrowMatch schema:EnergyEfficiencyEnumeration ;
    skos:narrowMatch schema:EUEnergyEfficiencyEnumeration ;
    skos:narrowMatch schema:EnergyConsumptionDetails ;
    skos:narrowMatch 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:energyEfficiencyClass
    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 oec:energyEfficiencyClass ;
    rdfs:seeAlso schema:energyEfficiencyScaleMin ;
    skos:closeMatch schema:hasEnergyEfficiencyCategory .

oec:annualEnergyConsumption
    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:powerConsumptionOn
    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:powerConsumptionStandby
    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:powerConsumptionOff
    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 .

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:narrowMatch gs1:regulatoryReferenceNumber ;
    skos:narrowMatch 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:energyEfficiency
    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 ;
    skos:exactMatch oec:energyEfficiency ;
    rdfs:seeAlso schema:energyEfficiencyScaleMax ;
    rdfs:seeAlso schema:energyEfficiencyScaleMin ;
    skos:broadMatch <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:broadMatch dppk:roundTripEfficiencyAt50Cycles .

# -----------------------------------------------------------------------------
# End-of-Life Program
# (formerly eutex:takeBackProgram + euelec:collectionSchemeUrl + eubat:endOfLifeInfo)
# -----------------------------------------------------------------------------

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:narrowMatch 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 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 schema:cashBack .

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:narrowMatch schema:url ;
    skos:narrowMatch 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:endOfLifeProgram
    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:hazardSignalWord
    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:repairProvider
    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:narrowMatch 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:narrowMatch 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:dueDiligenceRegulationContext
    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:narrowMatch 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:narrowMatch <urn:samm:io.BatteryPass.MaterialComposition:1.2.0#isCriticalRawMaterial> ;
    skos:narrowMatch dppk:criticalRawMaterials ;
    skos:narrowMatch oec: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:narrowMatch untp:version ;
    skos:narrowMatch dppk:dppSchemaVersion ;
    skos:narrowMatch 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:broadMatch <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> .

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 .

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> .

# --- 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 .

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 .

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:environmentalProductDeclaration
    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 .

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:narrowMatch <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:narrowMatch schema:validThrough .

oec:impactIndicator
    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:indicatorType
    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:lifecycleStageResult for the modular breakdown."@en ;
    skos:narrowMatch gs1:value ;
    skos:narrowMatch schema:value .

oec:lifecycleStageResult
    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:lifecycleStage
    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:narrowMatch <urn:samm:io.BatteryPass.CarbonFootprint:1.2.0#lifecycleStage> .

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:closeMatch gs1:value ;
    skos:narrowMatch schema: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> .
