@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 dpp: <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-core: <https://test.uncefact.org/vocabulary/untp/core/> .
@prefix untp-dpp: <https://test.uncefact.org/vocabulary/untp/dpp/> .
# 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, and the published namespace currently doesn't
# dereference cleanly (https://w3id.org/eudpp#X returns 404 via the W3ID
# redirect). Catalog: https://dpp.vocabulary-hub.eu/specifications.
# Strictly rdfs:seeAlso — no rdfs:subClassOf, no owl:equivalentClass.
@prefix cirpass2: <https://w3id.org/eudpp#> .

# =============================================================================
# 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:referencedFileDetails 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. Semantic equivalences are declared via owl:equivalentProperty.
All ratio/fraction properties use 0-1 decimal scale (e.g., 0.45 = 45%).

EPCIS 2.0 Extension Declaration:
GS1-Extensions: dpp=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
- owl:equivalentProperty where a semantic equivalent 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-04-29"^^xsd:date ;
    owl:versionInfo "0.9.6" ;
    owl:versionIRI <https://ref.openepcis.io/extensions/common/core/0.9.6> ;
    vann:preferredNamespacePrefix "dpp" ;
    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/dpp/> ;
    rdfs:seeAlso <https://gs1.eu/wp-content/uploads/2025/02/GDSN-Implementation-Guideline-for-exchanging-Carbon-Footprint-Data-3.pdf> ;
    rdfs:seeAlso <https://uncefact.github.io/spec-untp/> ;
    rdfs:comment "Aligned with UN Transparency Protocol patterns"@en ;
    dcterms:source <https://uncefact.github.io/spec-untp/> ;
    owl:imports <https://ref.gs1.org/voc/> .

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

dpp: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:gln 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:gln 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 .

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

dpp: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 untp-core:CircularityPerformance ;
    rdfs:seeAlso cirpass2:CircularEconomyIndicator ;
    owl:equivalentClass untp-core:CircularityPerformance ;
    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 .

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

dpp: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 ;
    owl:equivalentClass gs1:ReferencedFileDetails ;
    skos:note """PREFER gs1:ReferencedFileDetails where possible. This class provides equivalent
functionality with additional ESPR-specific document types. Use gs1:referencedFileDetails
property with gs1:ReferencedFileDetails for standard documents (manuals, certificates).
Use dpp:DocumentReference only when ESPR-specific document types are required."""@en .

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

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

dpp: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:gln for facility identification, gs1: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-core:Facility ;
    rdfs:seeAlso locn:Location ;
    rdfs:seeAlso locn:Address ;
    rdfs:seeAlso locn:Geometry ;
    rdfs:seeAlso cirpass2:Facility ;
    owl:equivalentClass untp-core: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:gln for facility GLN identification, gs1: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 .

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

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

dpp: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:referencedFileDetails ;
    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:referencedFileDetails for repair manuals."""@en .

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

dpp: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 untp-core:EmissionsPerformance ;
    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> ;
    owl:equivalentClass untp-core:EmissionsPerformance ;
    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.

dpp: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> ;
    rdfs:seeAlso untp-dpp:TraceabilityPerformance ;
    skos:note """Required extension: ESPR and due diligence regulations require traceability metrics.
Aligned with UNTP TraceabilityPerformance for supply chain transparency reporting."""@en.

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

dpp: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 (dpp:Manufacturer dpp:Importer dpp:Distributor dpp:Processor dpp:Trader) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:Manufacturer a dpp:OperatorRole ; rdfs:label "Manufacturer"@en ;
    rdfs:comment "Entity that produces the product, including own-brand labellers per EU Market Surveillance Regulation 2019/1020."@en .
dpp:Importer a dpp: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 .
dpp:Distributor a dpp: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 .
dpp:Processor a dpp:OperatorRole ; rdfs:label "Processor"@en ;
    rdfs:comment "Entity that processes raw materials or components into finished or intermediate products."@en .
dpp:Trader a dpp:OperatorRole ; rdfs:label "Trader"@en ;
    rdfs:comment "Entity that buys and sells products without significant modification or processing."@en .
dpp:AuthorisedRepresentative a dpp: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 .
dpp:FulfilmentServiceProvider a dpp: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)
# =============================================================================

dpp: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 (dpp:Public dpp:AuthorizedOnly dpp:Restricted) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

# =============================================================================
# Passport Status Enumeration (EN 18222 Lifecycle Management)
# =============================================================================

dpp:PassportStatus
    a rdfs:Class ;
    rdfs:label "Passport Status"@en ;
    rdfs:comment "Lifecycle status of a Digital Product Passport per EN 18222 API lifecycle management."@en ;
    dcterms:source <https://standards.iteh.ai/catalog/standards/cen/2d02edd9-ec28-4eb3-b99a-6a84c0a84257/pren-18222> ;
    skos:note "EN 18222 (FprEN, publishing March 2026) defines APIs for DPP lifecycle management including status transitions."@en ;
    owl:oneOf (dpp:Draft dpp:Active dpp:Updated dpp:Withdrawn dpp:Archived) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:Draft a dpp:PassportStatus ; rdfs:label "Draft"@en ;
    rdfs:comment "Passport is being prepared and not yet publicly available."@en .
dpp:Active a dpp:PassportStatus ; rdfs:label "Active"@en ;
    rdfs:comment "Passport is published and represents the current state of the product."@en ;
    rdfs:seeAlso cbv:Disp-active .
dpp:Updated a dpp:PassportStatus ; rdfs:label "Updated"@en ;
    rdfs:comment "Passport has been modified since initial publication. Previous versions remain accessible per EN 18221."@en .
dpp:Withdrawn a dpp:PassportStatus ; rdfs:label "Withdrawn"@en ;
    rdfs:comment "Passport has been withdrawn (e.g., product recall). Data remains available to authorities per ESPR Article 9."@en ;
    rdfs:seeAlso cbv:Disp-recalled .
dpp:Archived a dpp:PassportStatus ; rdfs:label "Archived"@en ;
    rdfs:comment "Passport is archived after product end-of-life. Data persisted per EN 18221 retention requirements."@en .

dpp:Suspended a dpp:PassportStatus ; rdfs:label "Suspended"@en ;
    rdfs:comment "Passport temporarily not in force (e.g. pending investigation, recall under review). Distinct from dpp:Withdrawn, which is terminal. Added for BatteryPass-Ready v1.3 / JTC-24 alignment."@en .

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

dpp: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 (dpp:ModelLevel dpp:ModelPerSiteLevel dpp:BatchLevel dpp:ItemLevel) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:ModelLevel a dpp:DPPGranularity ; rdfs:label "Battery model"@en ;
    rdfs:comment "Attribute reported once per battery model (e.g. nominal voltage, expected cycle life)."@en .
dpp:ModelPerSiteLevel a dpp:DPPGranularity ; rdfs:label "Battery model per manufacturing site"@en ;
    rdfs:comment "Attribute reported per (model, manufacturing site) tuple (e.g. manufacturer information, manufacturing place)."@en .
dpp:BatchLevel a dpp: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 .
dpp:ItemLevel a dpp: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.

dpp:granularity
    a owl:ObjectProperty ;
    rdfs:label "DPP Granularity"@en ;
    rdfs:comment "Reporting granularity of this DPP instance (model / model-per-site / batch / item)."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range dpp:DPPGranularity ;
    dcterms:source <https://thebatterypass.eu/battery-pass-ready/publications/> ;
    skos:note "BatteryPass-Ready v1.3 longlist attribute #3. JTC-24 draft."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:lastUpdate
    a owl:DatatypeProperty ;
    rdfs:label "DPP Last Update"@en ;
    rdfs:comment "Date and time the DPP was last modified. Updated whenever any passport attribute changes."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range xsd:dateTime ;
    dcterms:source <https://thebatterypass.eu/battery-pass-ready/publications/> ;
    skos:note "BatteryPass-Ready v1.3 longlist attribute #4. JTC-24 draft. Battery module previously carried this as battery:lastDataUpdate; promoted to dpp: for cross-regulation reuse."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 (
        dpp:Batteries
        dpp:Textiles
        dpp:Electronics
        dpp:Furniture
        dpp:Tyres
        dpp:ConstructionProducts
        dpp:Chemicals
        dpp:Packaging
        dpp:FoodContact
        dpp:IronSteel
        dpp:Aluminium
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:Batteries a dpp:ProductCategory ; rdfs:label "Batteries"@en ;
    rdfs:comment "Batteries and accumulators per EU Battery Regulation 2023/1542."@en .
dpp:Textiles a dpp:ProductCategory ; rdfs:label "Textiles"@en ;
    rdfs:comment "Textile products including apparel, footwear, and home textiles."@en .
dpp:Electronics a dpp:ProductCategory ; rdfs:label "Electronics"@en ;
    rdfs:comment "Electronic and electrical equipment including ICT and consumer electronics."@en .
dpp:Furniture a dpp:ProductCategory ; rdfs:label "Furniture"@en ;
    rdfs:comment "Furniture products including domestic and office furniture."@en .
dpp:Tyres a dpp:ProductCategory ; rdfs:label "Tyres"@en ;
    rdfs:comment "Tyres for motor vehicles and their trailers."@en .
dpp:ConstructionProducts a dpp:ProductCategory ; rdfs:label "Construction Products"@en ;
    rdfs:comment "Construction products per Construction Products Regulation."@en .
dpp:Chemicals a dpp:ProductCategory ; rdfs:label "Chemicals"@en ;
    rdfs:comment "Chemical substances and mixtures."@en .
dpp:Packaging a dpp:ProductCategory ; rdfs:label "Packaging"@en ;
    rdfs:comment "Packaging and packaging waste products."@en .
dpp:FoodContact a dpp:ProductCategory ; rdfs:label "Food Contact Materials"@en ;
    rdfs:comment "Materials and articles intended for food contact."@en .
dpp:IronSteel a dpp:ProductCategory ; rdfs:label "Iron and Steel"@en ;
    rdfs:comment "Iron and steel intermediate products."@en .
dpp:Aluminium a dpp:ProductCategory ; rdfs:label "Aluminium"@en ;
    rdfs:comment "Aluminium intermediate products."@en .

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

dpp: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 (
        dpp:AcuteToxicity
        dpp:SkinCorrosionOrIrritation
        dpp:EyeDamageOrIrritation
        dpp:RespiratoryOrSkinSensitization
        dpp:GermCellMutagenicity
        dpp:Carcinogenicity
        dpp:ReproductiveToxicity
        dpp:SpecificTargetOrganToxicity
        dpp:AspirationHazard
        dpp:HazardousToAquaticEnvironment
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:AcuteToxicity a dpp: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 .
dpp:SkinCorrosionOrIrritation a dpp:HazardClass ; rdfs:label "Skin Corrosion or Irritation"@en ;
    rdfs:comment "Substances causing irreversible damage (corrosion) or reversible damage (irritation) to skin tissue."@en .
dpp:EyeDamageOrIrritation a dpp:HazardClass ; rdfs:label "Eye Damage or Irritation"@en ;
    rdfs:comment "Substances causing serious eye damage or reversible eye irritation upon contact."@en .
dpp:RespiratoryOrSkinSensitization a dpp:HazardClass ; rdfs:label "Respiratory or Skin Sensitization"@en ;
    rdfs:comment "Substances causing hypersensitivity of airways (asthma) or allergic skin reactions after exposure."@en .
dpp:GermCellMutagenicity a dpp:HazardClass ; rdfs:label "Germ Cell Mutagenicity"@en ;
    rdfs:comment "Substances that may cause heritable genetic mutations in human germ cells."@en .
dpp:Carcinogenicity a dpp:HazardClass ; rdfs:label "Carcinogenicity"@en ;
    rdfs:comment "Substances known or suspected to cause cancer in humans."@en .
dpp:ReproductiveToxicity a dpp:HazardClass ; rdfs:label "Reproductive Toxicity"@en ;
    rdfs:comment "Substances adversely affecting sexual function, fertility, or development of offspring."@en .
dpp:SpecificTargetOrganToxicity a dpp:HazardClass ; rdfs:label "Specific Target Organ Toxicity"@en ;
    rdfs:comment "Substances causing non-lethal damage to specific organs after single or repeated exposure."@en .
dpp:AspirationHazard a dpp:HazardClass ; rdfs:label "Aspiration Hazard"@en ;
    rdfs:comment "Liquid or solid substances causing chemical pneumonia or pulmonary injury if aspirated into airways."@en .
dpp:HazardousToAquaticEnvironment a dpp: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
# =============================================================================

dpp: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 (
        dpp:DueDiligenceDocument
        dpp:Certificate
        dpp:TestReport
        dpp:Manual
        dpp:DeclarationOfConformity
        dpp:SafetyDataSheet
        dpp:EnvironmentalReport
        dpp:ThirdPartyVerification
    ) .

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

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

dpp:OperationalScope
    a rdfs:Class ;
    rdfs:label "Operational Scope"@en ;
    rdfs:comment "Lifecycle boundary for emissions or environmental impact calculations."@en ;
    dcterms:source <https://uncefact.github.io/spec-untp/> ;
    rdfs:seeAlso untp-core:OperationalScope ;
    owl:oneOf (dpp:CradleToGate dpp:CradleToGrave) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:CradleToGate a dpp:OperationalScope ; rdfs:label "Cradle to Gate"@en ;
    rdfs:comment "Emissions from raw material extraction through manufacturing, excluding use phase and end-of-life."@en .
dpp:CradleToGrave a dpp: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)
# =============================================================================

dpp:GranularityLevel
    a rdfs:Class ;
    rdfs:label "Granularity Level"@en ;
    rdfs:comment "Level of specificity for DPP data - whether it applies to product class, batch, or individual item."@en ;
    dcterms:source <https://uncefact.github.io/spec-untp/> ;
    rdfs:seeAlso untp-dpp:GranularityLevel ;
    owl:oneOf (dpp:ProductClass dpp:Batch dpp:Item) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:ProductClass a dpp:GranularityLevel ; rdfs:label "Product Class"@en ;
    rdfs:comment "DPP data applies to all products of this type/model."@en .
dpp:Batch a dpp:GranularityLevel ; rdfs:label "Batch"@en ;
    rdfs:comment "DPP data applies to a specific production batch."@en .
dpp:Item a dpp:GranularityLevel ; rdfs:label "Item"@en ;
    rdfs:comment "DPP data applies to an individual serialized product."@en .

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

dpp:operatorInformation
    a owl:ObjectProperty ;
    rdfs:label "Operator Information"@en ;
    rdfs:comment "Economic operator responsible for the product."@en ;
    rdfs:range dpp:OperatorInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:operatorRole
    a owl:ObjectProperty ;
    rdfs:label "Operator Role"@en ;
    rdfs:comment "Role of the economic operator (manufacturer, importer, etc.)."@en ;
    rdfs:domain dpp:OperatorInformation ;
    rdfs:range dpp:OperatorRole ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:registrationNumber
    a owl:DatatypeProperty ;
    rdfs:label "Registration Number"@en ;
    rdfs:comment "Official registration or license number."@en ;
    rdfs:domain dpp:OperatorInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:dueDiligenceReport
    a owl:ObjectProperty ;
    rdfs:label "Due Diligence Report"@en ;
    rdfs:comment "Reference to due diligence documentation."@en ;
    rdfs:range dpp:DueDiligenceReport ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:reportUrl
    a owl:DatatypeProperty ;
    rdfs:label "Report URL"@en ;
    rdfs:comment "URL to the due diligence report."@en ;
    rdfs:domain dpp:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:thirdPartyAssurancesUrl
    a owl:DatatypeProperty ;
    rdfs:label "Third Party Assurances URL"@en ;
    rdfs:comment "URL to third party verification or assurances."@en ;
    rdfs:domain dpp:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:reportDate
    a owl:DatatypeProperty ;
    rdfs:label "Report Date"@en ;
    rdfs:comment "Date of the due diligence report."@en ;
    rdfs:domain dpp:DueDiligenceReport ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:verificationBody
    a owl:ObjectProperty ;
    rdfs:label "Verification Body"@en ;
    rdfs:comment "Organization that performed third-party verification."@en ;
    rdfs:domain dpp:DueDiligenceReport ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:hazardousSubstances
    a owl:ObjectProperty ;
    rdfs:label "Hazardous Substances"@en ;
    rdfs:comment "Hazardous substances present in the product."@en ;
    rdfs:range dpp:HazardousSubstance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:hazardClass
    a owl:ObjectProperty ;
    rdfs:label "Hazard Class"@en ;
    rdfs:comment "CLP Regulation hazard classification."@en ;
    rdfs:domain dpp:HazardousSubstance ;
    rdfs:range dpp:HazardClass ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:casNumber
    a owl:DatatypeProperty ;
    rdfs:label "CAS Number"@en ;
    rdfs:comment "Chemical Abstracts Service registry number."@en ;
    rdfs:domain dpp:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:concentration
    a owl:DatatypeProperty ;
    rdfs:label "Concentration"@en ;
    rdfs:comment "Concentration of the hazardous substance as percentage."@en ;
    rdfs:domain dpp:HazardousSubstance ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:hazardImpact
    a owl:DatatypeProperty ;
    rdfs:label "Hazard Impact"@en ;
    rdfs:comment "Description of the hazard impact."@en ;
    rdfs:domain dpp:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:documents
    a owl:ObjectProperty ;
    rdfs:label "Documents"@en ;
    rdfs:comment "Supporting documents for the product."@en ;
    rdfs:range dpp:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:documentType
    a owl:ObjectProperty ;
    rdfs:label "Document Type"@en ;
    rdfs:domain dpp:DocumentReference ;
    rdfs:range dpp:DocumentType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:documentUrl
    a owl:DatatypeProperty ;
    rdfs:label "Document URL"@en ;
    rdfs:comment "URL to the document. See also gs1:referencedFileURL."@en ;
    rdfs:domain dpp:DocumentReference ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:referencedFileURL ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:mimeType
    a owl:DatatypeProperty ;
    rdfs:label "MIME Type"@en ;
    rdfs:domain dpp:DocumentReference ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:languageCode
    a owl:DatatypeProperty ;
    rdfs:label "Language Code"@en ;
    rdfs:comment "ISO 639-1 language code. See also gs1:fileLanguageCode."@en ;
    rdfs:domain dpp:DocumentReference ;
    rdfs:range xsd:string ;
    rdfs:seeAlso gs1:fileLanguageCode ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:issueDate
    a owl:DatatypeProperty ;
    rdfs:label "Issue Date"@en ;
    rdfs:domain dpp:DocumentReference ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:circularityPerformance
    a owl:ObjectProperty ;
    rdfs:label "Circularity Performance"@en ;
    rdfs:comment "Circularity performance data for the product."@en ;
    rdfs:range dpp:CircularityPerformance ;
    rdfs:seeAlso untp-core:circularityPerformance ;
    owl:equivalentProperty untp-core:circularityPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:recyclableContent ;
    owl:equivalentProperty untp-core:recyclableContent ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP recyclableContent."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:anyURI ;
    rdfs:seeAlso gs1:consumerRecyclingInstructions ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:dismantlingInstructions
    a owl:ObjectProperty ;
    rdfs:label "Dismantling Instructions"@en ;
    rdfs:domain dpp:CircularityPerformance ;
    rdfs:range dpp:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:utilityFactor ;
    owl:equivalentProperty untp-core:utilityFactor ;
    dcterms:source <https://uncefact.github.io/spec-untp/> ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CircularityPerformance ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:materialCircularityIndicator ;
    owl:equivalentProperty untp-core:materialCircularityIndicator ;
    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/> .

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

dpp:recycledContentDetails
    a owl:ObjectProperty ;
    rdfs:label "Recycled Content Details"@en ;
    rdfs:comment "Detailed recycled content breakdown with pre/post-consumer splits."@en ;
    rdfs:range dpp:RecycledContent ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 dpp:RecycledContent ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:recycledContent ;
    owl:equivalentProperty untp-core:recycledContent ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP recycledContent."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RecycledContent ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RecycledContent ;
    rdfs:range xsd:decimal ;
    skos:note "Value is a decimal fraction 0-1."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:materialComposition
    a owl:ObjectProperty ;
    rdfs:label "Material Composition"@en ;
    rdfs:range dpp:MaterialComposition ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:MaterialComposition ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:massFraction ;
    owl:equivalentProperty untp-core:massFraction ;
    skos:note "Value is a decimal fraction 0-1. Aligned with UNTP massFraction."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:MaterialComposition ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:emissionsPerformance
    a owl:ObjectProperty ;
    rdfs:label "Emissions Performance"@en ;
    rdfs:comment "Emissions performance data container. Aligned with UNTP EmissionsPerformance."@en ;
    rdfs:range dpp:EmissionsPerformance ;
    rdfs:seeAlso untp-core:emissionsPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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> ;
    rdfs:seeAlso untp-core:carbonFootprint ;
    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.

dpp: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> ;
    rdfs:seeAlso untp-core:carbonFootprint ;
    owl:equivalentProperty untp-core:carbonFootprint ;
    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/> .

dpp: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 ;
    rdfs:seeAlso untp-core:declaredUnit ;
    owl:equivalentProperty untp-core:declaredUnit ;
    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/> .

dpp: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:referencedFileDetails with gs1:ReferencedFileTypeCode-CERTIFICATION for the study document."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:operationalScope
    a owl:ObjectProperty ;
    rdfs:label "Operational Scope"@en ;
    rdfs:comment "Lifecycle boundary for emissions calculation (CradleToGate or CradleToGrave)."@en ;
    rdfs:domain dpp:EmissionsPerformance ;
    rdfs:range dpp:OperationalScope ;
    rdfs:seeAlso untp-core:operationalScope ;
    owl:equivalentProperty untp-core:operationalScope ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EmissionsPerformance ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:primarySourcedRatio ;
    owl:equivalentProperty untp-core:primarySourcedRatio ;
    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/> .

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

dpp: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/> .

dpp: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/> .

dpp: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/> .

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

dpp:traceabilityPerformance
    a owl:ObjectProperty ;
    rdfs:label "Traceability Performance"@en ;
    rdfs:comment "Traceability performance metrics for supply chain verification."@en ;
    rdfs:range dpp:TraceabilityPerformance ;
    rdfs:seeAlso untp-dpp:traceabilityPerformance ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:TraceabilityPerformance ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso untp-core:verifiedRatio ;
    owl:equivalentProperty untp-core:verifiedRatio ;
    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/> .

dpp:granularityLevel
    a owl:ObjectProperty ;
    rdfs:label "Granularity Level"@en ;
    rdfs:comment "Level of specificity for DPP data (ProductClass, Batch, or Item)."@en ;
    rdfs:range dpp:GranularityLevel ;
    rdfs:seeAlso untp-dpp:granularityLevel ;
    owl:equivalentProperty untp-dpp:granularityLevel ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .

dpp: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/> .

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

dpp: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 dpp:OperatorInformation ;
    rdfs:range xsd:string ;
    dcterms:source <https://eur-lex.europa.eu/eli/reg/2024/1781> .

dpp:eoriNumber
    a owl:DatatypeProperty ;
    rdfs:label "EORI Number"@en ;
    rdfs:comment "Economic Operators Registration and Identification (EORI) number for customs purposes."@en ;
    rdfs:domain dpp:OperatorInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:facilityInformation
    a owl:ObjectProperty ;
    rdfs:label "Facility Information"@en ;
    rdfs:comment "Manufacturing or processing facility details."@en ;
    rdfs:range dpp:FacilityInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:facilityType
    a owl:DatatypeProperty ;
    rdfs:label "Facility Type"@en ;
    rdfs:comment "Type of facility (manufacturing, processing, assembly, etc.)."@en ;
    rdfs:domain dpp:FacilityInformation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:facilityCertifications
    a owl:ObjectProperty ;
    rdfs:label "Facility Certifications"@en ;
    rdfs:comment "Certifications held by the facility (ISO 9001, ISO 14001, etc.)."@en ;
    rdfs:domain dpp:FacilityInformation ;
    rdfs:range gs1:CertificationDetails ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 dpp:SubstanceOfConcern ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:ecNumber
    a owl:DatatypeProperty ;
    rdfs:label "EC Number"@en ;
    rdfs:comment "European Community number for the substance (EINECS/ELINCS)."@en ;
    rdfs:domain dpp:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:SubstanceOfConcern ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:performanceInfo
    a owl:ObjectProperty ;
    rdfs:label "Performance Information"@en ;
    rdfs:comment "Product performance and durability information."@en ;
    rdfs:range dpp:PerformanceInfo ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:PerformanceInfo ;
    rdfs:range xsd:integer ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:PerformanceInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:PerformanceInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:testedConditions
    a owl:DatatypeProperty ;
    rdfs:label "Tested Conditions"@en ;
    rdfs:comment "Description of conditions under which performance was tested."@en ;
    rdfs:domain dpp:PerformanceInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:repairabilityInfo
    a owl:ObjectProperty ;
    rdfs:label "Repairability Information"@en ;
    rdfs:comment "Repair and maintenance information for the product."@en ;
    rdfs:range dpp:RepairabilityInfo ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RepairabilityInfo ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:repairabilityClass
    a owl:DatatypeProperty ;
    rdfs:label "Repairability Class"@en ;
    rdfs:comment "Repairability class (A to E, where A is most repairable)."@en ;
    rdfs:domain dpp:RepairabilityInfo ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RepairabilityInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:repairInstructions
    a owl:ObjectProperty ;
    rdfs:label "Repair Instructions"@en ;
    rdfs:comment "URL or reference to repair instructions and manuals."@en ;
    rdfs:domain dpp:RepairabilityInfo ;
    rdfs:range dpp:DocumentReference ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:professionalRepairNetwork
    a owl:DatatypeProperty ;
    rdfs:label "Professional Repair Network"@en ;
    rdfs:comment "URL to find authorized repair service providers."@en ;
    rdfs:domain dpp:RepairabilityInfo ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RepairabilityInfo ;
    rdfs:range xsd:boolean ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RepairabilityInfo ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:accessRights
    a owl:ObjectProperty ;
    rdfs:label "Access Rights"@en ;
    rdfs:comment "Access control configuration for this data element."@en ;
    rdfs:range dpp:AccessRights ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:accessLevel
    a owl:ObjectProperty ;
    rdfs:label "Access Level"@en ;
    rdfs:comment "The access level for this data (Public, AuthorizedOnly, Restricted)."@en ;
    rdfs:domain dpp:AccessRights ;
    rdfs:range dpp:AccessLevel ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:authorizedParties
    a owl:ObjectProperty ;
    rdfs:label "Authorized Parties"@en ;
    rdfs:comment "List of parties authorized to access restricted data."@en ;
    rdfs:domain dpp:AccessRights ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:AccessRights ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:productCategory
    a owl:ObjectProperty ;
    rdfs:label "Product Category"@en ;
    rdfs:comment "ESPR product category classification."@en ;
    rdfs:range dpp:ProductCategory ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:passportIdentifier
    a owl:DatatypeProperty ;
    rdfs:label "Passport Identifier"@en ;
    rdfs:comment "Unique identifier for this Digital Product Passport instance."@en ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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/> .

dpp: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/> .

dpp:passportStatus
    a owl:ObjectProperty ;
    rdfs:label "Passport Status"@en ;
    rdfs:comment "Lifecycle status of this Digital Product Passport."@en ;
    rdfs:range dpp:PassportStatus ;
    dcterms:source <https://standards.iteh.ai/catalog/standards/cen/2d02edd9-ec28-4eb3-b99a-6a84c0a84257/pren-18222> ;
    skos:note "Aligned with EN 18222 DPP lifecycle management. Status values: Draft, Active, Updated, Withdrawn, Archived."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:passportLastModified
    a owl:DatatypeProperty ;
    rdfs:label "Passport Last Modified"@en ;
    rdfs:comment "Date and time when this Digital Product Passport was last modified."@en ;
    rdfs:range xsd:dateTime ;
    dcterms:source <https://standards.iteh.ai/catalog/standards/cen/2d02edd9-ec28-4eb3-b99a-6a84c0a84257/pren-18222> ;
    skos:note "Supports EN 18222 lifecycle tracking and EN 18221 versioning requirements."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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/> .

dpp: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 dpp: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/> .

dpp: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 <https://standards.iteh.ai/catalog/standards/cen/2d02edd9-ec28-4eb3-b99a-6a84c0a84257/pren-18222> ;
    skos:note "Supports EN 18221 requirement that previous versions remain available."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

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

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

dpp: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://uncefact.github.io/spec-untp/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.

dpp: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://uncefact.github.io/spec-untp/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/> .

# =============================================================================
# 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 GSMP Work Request
# WR 25-212 (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)

dpp: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://xchange.gs1.org/cr/gsmp WR 25-212" ;
    rdfs:seeAlso <https://www.gs1.org/standards/barcodes/application-identifiers/8026> ;
    skos:note "Reference pattern aligned with WR 25-212 (Community Review). The ITIP AI 8026 encodes GTIN + total piece count + piece number in one identifier."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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://xchange.gs1.org/cr/gsmp WR 25-212" ;
    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/> .

dpp: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 dpp:IndividualTradeItemPiece ;
    rdfs:range xsd:positiveInteger ;
    dcterms:source "https://xchange.gs1.org/cr/gsmp WR 25-212" ;
    skos:note "Maps to the piece-number component of GS1 AI 8026. MUST be less than or equal to dpp:tradeItemPieceCount on the parent product."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:IndividualTradeItemPiece ;
    rdfs:range gs1:Product ;
    dcterms:source "https://xchange.gs1.org/cr/gsmp WR 25-212" ;
    skos:note "Inverse relationship: a gs1:Product with dpp:tradeItemPieceCount > 1 has multiple dpp:IndividualTradeItemPiece members linked back via this property."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:IndividualTradeItemPiece ;
    rdfs:range xsd:string ;
    dcterms:source "https://xchange.gs1.org/cr/gsmp WR 25-212" ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 (
        dpp:HS6
        dpp:HS8
        dpp:CN8
        dpp:HTSUS10
        dpp:CN10
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 dpp: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/> .

dpp:customsCommodityCodeType
    a owl:ObjectProperty ;
    rdfs:label "Customs Commodity Code Type"@en ;
    rdfs:comment "The classification system (HS, CN, HTSUS, etc.) used for dpp:customsCommodityCode on the same trade item."@en ;
    rdfs:domain gs1:Product ;
    rdfs:range dpp:CustomsCommodityCodeType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 dpp: extension because no GS1 Web Vocabulary term currently carries a boolean compliance assertion."@en ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:range gs1:Country ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:ExtendedProducerResponsibility ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .

dpp: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/> .

dpp: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 dpp:Biodegradability ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:BiodegradabilityTestMethod
    a owl:Class ;
    rdfs:label "Biodegradability Test Method"@en ;
    rdfs:comment "The standardised laboratory method used to assess biodegradability."@en ;
    owl:oneOf (
        dpp:ISO14593
        dpp:OECD301B
        dpp:OECD301D
        dpp:OECD301F
        dpp:OECD310
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:biodegradabilityTestMethod
    a owl:ObjectProperty ;
    rdfs:label "Biodegradability Test Method"@en ;
    rdfs:comment "The test method used to determine the biodegradability percentage."@en ;
    rdfs:domain dpp:Biodegradability ;
    rdfs:range dpp:BiodegradabilityTestMethod ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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/> .

dpp:CompostabilityType
    a owl:Class ;
    rdfs:label "Compostability Type"@en ;
    rdfs:comment "Classification of how a product can be composted."@en ;
    owl:oneOf (
        dpp:IndustrialCompostable
        dpp:HomeCompostable
        dpp:NotCompostable
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:compostabilityType
    a owl:ObjectProperty ;
    rdfs:label "Compostability Type"@en ;
    rdfs:domain dpp:Compostability ;
    rdfs:range dpp:CompostabilityType ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:Compostability ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .

dpp: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 dpp:DepositReturnScheme ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:DepositReturnScheme ;
    rdfs:range gs1:Organization ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:DepositReturnScheme ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:depositReturnScheme
    a owl:ObjectProperty ;
    rdfs:label "Deposit-Return Scheme"@en ;
    rdfs:comment "Links a product (typically gs1:Packaging) to the DRS it participates in."@en ;
    rdfs:range dpp:DepositReturnScheme ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:OperatorInformation owl:equivalentClass <https://vocabulary.uncefact.org/untp/0.7.0/Party> .
dpp:FacilityInformation owl:equivalentClass <https://vocabulary.uncefact.org/untp/0.7.0/Facility> .
dpp:GranularityLevel    owl:equivalentClass <https://vocabulary.uncefact.org/untp/0.7.0/ProductIDGranularity> .

# =============================================================================
# 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 (battery:, textile:,
# electronics:, detergent:) where they were redundantly redefined. Lifted
# to dpp: so every module reuses the same shape.

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

dpp: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/> .

dpp: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 dpp:declaredFunctionalUnit set on the parent CarbonFootprintDeclaration."@en ;
    rdfs:domain dpp:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CarbonFootprintDeclaration ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:CarbonFootprintDeclaration ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:carbonFootprintDeclaration
    a owl:ObjectProperty ;
    rdfs:label "Carbon Footprint Declaration"@en ;
    rdfs:comment "Links a product to its carbon footprint declaration."@en ;
    rdfs:range dpp:CarbonFootprintDeclaration ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .

dpp: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 dpp:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:recyclabilityRate
    a owl:DatatypeProperty ;
    rdfs:label "Recyclability Rate"@en ;
    rdfs:comment "Decimal fraction (0–1) of the product that can be recycled. Aligns with untp:recyclableContent."@en ;
    rdfs:domain dpp:RecyclabilityAssessment ;
    rdfs:range xsd:decimal ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:RecyclabilityAssessment ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:recyclabilityAssessment
    a owl:ObjectProperty ;
    rdfs:label "Recyclability Assessment"@en ;
    rdfs:comment "Links a product to its recyclability assessment."@en ;
    rdfs:range dpp:RecyclabilityAssessment ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 ;
    owl:equivalentClass schema:EnergyConsumptionDetails ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 (
        dpp:EnergyClassA
        dpp:EnergyClassB
        dpp:EnergyClassC
        dpp:EnergyClassD
        dpp:EnergyClassE
        dpp:EnergyClassF
        dpp:EnergyClassG
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:energyEfficiencyClass
    a owl:ObjectProperty ;
    rdfs:label "Energy Efficiency Class"@en ;
    rdfs:domain dpp:EnergyEfficiency ;
    rdfs:range dpp:EnergyEfficiencyClass ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:annualEnergyConsumption
    a owl:ObjectProperty ;
    rdfs:label "Annual Energy Consumption"@en ;
    rdfs:comment "Annual energy consumption. gs1:QuantitativeValue with unitCode 'KWH'."@en ;
    rdfs:domain dpp:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EnergyEfficiency ;
    rdfs:range gs1:QuantitativeValue ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EnergyEfficiency ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:eprelProductUrl
    a owl:DatatypeProperty ;
    rdfs:label "EPREL Product URL"@en ;
    rdfs:comment "URL of the product's EPREL public page."@en ;
    rdfs:domain dpp:EnergyEfficiency ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:energyEfficiency
    a owl:ObjectProperty ;
    rdfs:label "Energy Efficiency"@en ;
    rdfs:range dpp:EnergyEfficiency ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

# -----------------------------------------------------------------------------
# End-of-Life Program
# (formerly textile:takeBackProgram + electronics:collectionSchemeUrl + battery:endOfLifeInfo)
# -----------------------------------------------------------------------------

dpp: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/> .

dpp: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 dpp:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EndOfLifeProgram ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:collectionPointDirectoryUrl
    a owl:DatatypeProperty ;
    rdfs:label "Collection Point Directory URL"@en ;
    rdfs:comment "URL of a directory of physical collection points."@en ;
    rdfs:domain dpp:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:EndOfLifeProgram ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:endOfLifeProgram
    a owl:ObjectProperty ;
    rdfs:label "End-of-Life Program"@en ;
    rdfs:range dpp:EndOfLifeProgram ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:HazardSignalWord
    a owl:Class ;
    rdfs:label "Hazard Signal Word"@en ;
    rdfs:comment "CLP Regulation signal word — Danger or Warning."@en ;
    owl:oneOf (
        dpp:HazardDanger
        dpp:HazardWarning
    ) ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp:hazardSignalWord
    a owl:ObjectProperty ;
    rdfs:label "Hazard Signal Word"@en ;
    rdfs:comment "CLP Regulation 1272/2008 signal word — Danger or Warning."@en ;
    rdfs:domain dpp:HazardousSubstance ;
    rdfs:range dpp:HazardSignalWord ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:HazardousSubstance ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

# =============================================================================
# Right-to-Repair Directive 2024/1799 enrichment
# =============================================================================
# Right-to-Repair adds two cross-cutting concepts beyond dpp: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.

dpp: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 dpp: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/> .

dpp: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/> .

dpp:repairProvider
    a owl:ObjectProperty ;
    rdfs:label "Repair Provider"@en ;
    rdfs:comment "Links a product to one or more authorised repair providers."@en ;
    rdfs:range dpp:RepairProvider ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:repairProviderName
    a owl:DatatypeProperty ;
    rdfs:label "Repair Provider Name"@en ;
    rdfs:domain dpp:RepairProvider ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp:repairProviderUrl
    a owl:DatatypeProperty ;
    rdfs:label "Repair Provider URL"@en ;
    rdfs:domain dpp:RepairProvider ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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 dpp:DueDiligenceReport shape — different regulatory anchor."@en ;
    rdfs:domain dpp:DueDiligenceReport ;
    rdfs:range gs1:RegulatoryInformation ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp:DueDiligenceReport ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

dpp: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 dpp: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/> .

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

dpp: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 dpp: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/> .

dpp: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 dpp:MaterialComposition ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://ref.openepcis.io/extensions/common/core/> .

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

dpp: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/> .
