@prefix : <http://proethica.org/ontology/intermediate#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix iao: <http://purl.obolibrary.org/obo/IAO_> .
@prefix proeth: <http://proethica.org/ontology/intermediate#> .
@prefix proeth-core: <http://proethica.org/ontology/core#> .
@prefix proeth-cases: <http://proethica.org/ontology/cases#> .
@prefix ifcrole: <http://proethica.org/vocab/ifc-roles#> .
@prefix bfo: <http://purl.obolibrary.org/obo/> .
@prefix time: <http://www.w3.org/2006/time#> .
@base <http://proethica.org/ontology/intermediate> .

<http://proethica.org/ontology/intermediate> rdf:type owl:Ontology ;
    owl:imports <http://purl.obolibrary.org/obo/bfo.owl> ,
                <http://proethica.org/ontology/core> ;
    rdfs:label "ProEthica Intermediate Ontology"@en ;
    rdfs:comment "A mid-level ontology bridging BFO to domain-specific ethical frameworks"@en ;
    dc:creator "ProEthica AI"@en ;
    dc:date "2025-05-31"^^xsd:date .

#################################################################
#    Core Ethical Modeling Concepts                              
#################################################################

# Declare key types needed by the OntologyMCPServer for entity extraction
:EntityType rdf:type owl:Class ;
    rdfs:label "Entity Type"@en ;
    rdfs:comment "Meta-class for entity types recognized by the ProEthica system"@en .

# New supertype for guideline concept extraction
:GuidelineConceptType rdf:type owl:Class ;
    rdfs:subClassOf :EntityType ;
    rdfs:label "Guideline Concept Type"@en ;
    rdfs:comment "A type of entity specifically extracted from ethical guidelines and standards. These are the eight core categories used for concept extraction from guideline documents."@en .

# The 8 Guideline Concept Types

# Role is imported from proethica-core, not redefined here

# Principle is imported from proethica-core, not redefined here


# ====================================================================
# PRINCIPLE SUBCLASSES BASED ON CHAPTER 2.2.2 LITERATURE
# ====================================================================

# Core Principle Categories from Chapter 2.2.2 Analysis
:FundamentalEthicalPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Principle ;
    rdfs:label "Fundamental Ethical Principle"@en ;
    iao:0000115 "A universal moral foundation that serves as the highest-level abstraction in professional ethics, requiring extensive interpretation through concrete cases (BFO: generically dependent continuant)"@en ;
    skos:definition "According to McLaren (2003), fundamental principles like public welfare and respect for persons cannot be applied through formal deduction alone but require extensional definition through landmark ethics cases and professional code applications. These principles function as constitutional-like foundations (Taddeo et al. 2024) that mediate moral ideals into professional practice (Hallamaa & Kalliokoski 2022)."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> , # McLaren 2003
                   <https://doi.org/10.1007/s00146-024-01870-x> , # Taddeo et al. 2024
                   <https://doi.org/10.1080/08989621.2022.2054267> ; # Hallamaa & Kalliokoski 2022
    rdfs:comment "Examples: Public Welfare Paramount, Respect for Persons, Justice, Beneficence. These require extensive interpretation and balancing in specific contexts."@en .

:ProfessionalVirtuePrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Principle ;
    rdfs:label "Professional Virtue Principle"@en ;
    iao:0000115 "A character-based principle defining professional excellence and ethical sensitivities specific to professional identity (BFO: generically dependent continuant)"@en ;
    skos:definition "Professional virtue principles guide professional identity formation and ethical sensitivities (Oakley & Cocking 2001). These principles are learned through expert examples (Anderson & Anderson 2018) and exemplified through model professional behavior cases, creating role-generated moral demands that shape professional character."@en ;
    dcterms:source <https://doi.org/10.1017/CBO9780511489471> , # Oakley & Cocking 2001
                   <https://doi.org/10.1007/s10994-018-5753-x> ; # Anderson & Anderson 2018
    rdfs:comment "Examples: Integrity, Competence, Honesty, Professional Courage, Accountability. These shape professional character and decision-making."@en .

:RelationalPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Principle ;
    rdfs:label "Relational Principle"@en ;
    iao:0000115 "A principle governing professional relationships and establishing frameworks for trust and stakeholder interactions (BFO: generically dependent continuant)"@en ;
    skos:definition "Relational principles establish frameworks for managing professional relationships and stakeholder trust. Following McLaren's extensional approach, these principles gain meaning through precedents from client-professional disputes and resolutions, defining how professionals navigate competing interests and maintain trustworthy relationships."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> , # McLaren 2003
                   <https://doi.org/10.1080/10508422.2016.1155099> ; # Dennis et al. 2016
    rdfs:comment "Examples: Confidentiality, Loyalty, Fairness, Transparency, Respect for Autonomy. These govern interpersonal professional dynamics."@en .

:DomainSpecificPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Principle ;
    rdfs:label "Domain-Specific Principle"@en ;
    iao:0000115 "A principle particular to professional domain contexts that bridges general ethics to specific technical practices (BFO: generically dependent continuant)"@en ;
    skos:definition "Domain-specific principles bridge general ethical guidance to particular professional contexts. As identified by Prem (2023), these principles face inherent challenges in operationalization but remain essential for contextual guidance. They are grounded through industry-specific cases and technical standards applications."@en ;
    dcterms:source <https://doi.org/10.1007/s00146-023-01687-0> , # Prem 2023
                   <https://doi.org/10.1007/s10676-021-09586-y> ; # Segun 2021
    rdfs:comment "Examples: Environmental Stewardship (engineering), Patient Autonomy (medicine), Academic Freedom (education). These address domain-specific ethical challenges."@en .

# Specific Principle Instances commonly found in Professional Codes
:PublicWelfarePrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :FundamentalEthicalPrinciple ;
    rdfs:label "Public Welfare Principle"@en ;
    iao:0000115 "The fundamental principle that public safety, health, and welfare must be held paramount in professional practice (BFO: generically dependent continuant)"@en ;
    skos:definition "The public welfare principle, as articulated in NSPE Fundamental Canon 1, requires professionals to hold paramount the safety, health, and welfare of the public. This principle exemplifies McLaren's challenge of operationalizing abstract guidance - 'hold paramount' gains meaning only through NSPE case applications and precedents like the Challenger disaster."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> , # McLaren 2003
                   "NSPE Code of Ethics Fundamental Canon 1" ;
    proeth:nspeReference "Fundamental Canon 1" ;
    proeth:extensionalCases "NSPE BER Case 92-6", "Challenger Disaster", "Hyatt Regency Walkway Collapse" ;
    rdfs:comment "Requires contextual interpretation to balance against client confidentiality and employer loyalty when public safety is at risk."@en .

:IntegrityPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :ProfessionalVirtuePrinciple ;
    rdfs:label "Integrity Principle"@en ;
    iao:0000115 "The professional virtue principle of maintaining honesty, truthfulness, and ethical consistency in professional practice (BFO: generically dependent continuant)"@en ;
    skos:definition "Professional integrity requires contextual interpretation through cases (Kong et al. 2020) and manifests differently across professional contexts. It encompasses honesty in professional communications, truthfulness in representations, and consistency between professional values and actions."@en ;
    dcterms:source <https://doi.org/10.1007/s10676-020-09538-y> , # Kong et al. 2020
                   "NSPE Code of Ethics II.3" ;
    proeth:nspeReference "Rule of Practice II.3" ;
    rdfs:comment "Central to professional identity formation and trust maintenance in professional relationships."@en .

:CompetencePrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :ProfessionalVirtuePrinciple ;
    rdfs:label "Competence Principle"@en ;
    iao:0000115 "The professional virtue principle requiring maintenance and application of professional knowledge and skill within areas of competence (BFO: generically dependent continuant)"@en ;
    skos:definition "The competence principle requires professionals to perform services only in areas of their competence and to maintain professional knowledge through continuous learning. This principle generates obligations for professional development and honest self-assessment of capabilities."@en ;
    dcterms:source "NSPE Code of Ethics II.2" ,
                   <https://doi.org/10.1017/CBO9780511489471> ; # Oakley & Cocking 2001
    proeth:nspeReference "Rule of Practice II.2" ;
    rdfs:comment "Balances professional autonomy with recognition of limitations and need for collaboration."@en .

:ConfidentialityPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :RelationalPrinciple ;
    rdfs:label "Confidentiality Principle"@en ;
    iao:0000115 "The relational principle protecting client information and maintaining trust in professional relationships (BFO: generically dependent continuant)"@en ;
    skos:definition "Confidentiality establishes trust frameworks in professional relationships by protecting client information from unauthorized disclosure. This principle requires balancing through precedents when it conflicts with public welfare or legal obligations."@en ;
    dcterms:source "NSPE Code of Ethics II.1.c" ,
                   <https://doi.org/10.1023/A:1024195425598> ; # McLaren 2003
    proeth:nspeReference "Rule of Practice II.1.c" ;
    rdfs:comment "Must be balanced against public safety obligations and legal disclosure requirements."@en .

:TransparencyPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :RelationalPrinciple ;
    rdfs:label "Transparency Principle"@en ;
    iao:0000115 "The relational principle requiring openness and disclosure in professional communications and decision-making (BFO: generically dependent continuant)"@en ;
    skos:definition "Transparency requires professionals to be open about conflicts of interest, limitations, and decision-making processes. This principle supports accountability and enables informed consent from stakeholders."@en ;
    dcterms:source "NSPE Code of Ethics II.4" ,
                   <https://doi.org/10.1080/10508422.2016.1155099> ; # Dennis et al. 2016
    proeth:nspeReference "Rule of Practice II.4" ;
    rdfs:comment "Essential for maintaining trust and enabling stakeholder participation in professional decisions."@en .

:EnvironmentalStewardshipPrinciple rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :DomainSpecificPrinciple ;
    rdfs:label "Environmental Stewardship Principle"@en ;
    iao:0000115 "The domain-specific principle in engineering requiring consideration of environmental impact and sustainability (BFO: generically dependent continuant)"@en ;
    skos:definition "Environmental stewardship in engineering requires balancing technical solutions with environmental protection and sustainable development. This principle has evolved through cases addressing pollution, resource depletion, and climate change impacts."@en ;
    dcterms:source "NSPE Code of Ethics III.2.d" ,
                   <https://doi.org/10.1007/s00146-023-01687-0> ; # Prem 2023
    proeth:nspeReference "Professional Obligation III.2.d" ;
    rdfs:comment "Bridges engineering practice with broader environmental and societal responsibilities."@en .


# Obligation is imported from proethica-core, not redefined here

# State is imported from proethica-core, not redefined here

# Resource is imported from proethica-core, not redefined here

# Action is imported from proethica-core, not redefined here

# Event is imported from proethica-core, not redefined here

# Capability is imported from proethica-core, not redefined here

# Constraint is imported from proethica-core, not redefined here

# Legacy type references (maintained for backward compatibility)
:Condition rdfs:subClassOf proeth-core:State ;
    rdfs:label "Condition"@en ;
    rdfs:comment "Legacy term for State. Use proeth-core:State instead for new concepts."@en ;
    owl:deprecated true .

:ConditionType rdf:type owl:Class ;
    rdfs:label "Condition Type"@en ;
    rdfs:comment "Legacy meta-class. Use State instead."@en ;
    owl:deprecated true .

# Meta-classes for subtypes (not GuidelineConceptTypes themselves)
:ResourceType rdf:type owl:Class ;
    rdfs:subClassOf :EntityType ;
    rdfs:label "Resource Type"@en ;
    rdfs:comment "Meta-class for specific resource types recognized by the ProEthica system"@en .

:EventType rdf:type owl:Class ;
    rdfs:subClassOf :EntityType ;
    rdfs:label "Event Type"@en ;
    rdfs:comment "Meta-class for specific event types recognized by the ProEthica system"@en .

:ActionType rdf:type owl:Class ;
    rdfs:subClassOf :EntityType ;
    rdfs:label "Action Type"@en ;
    rdfs:comment "Meta-class for specific action types recognized by the ProEthica system"@en .

:CapabilityType rdf:type owl:Class ;
    rdfs:subClassOf :EntityType ;
    rdfs:label "Capability Type"@en ;
    rdfs:comment "Meta-class for specific capability types recognized by the ProEthica system"@en .

#################################################################
# Action Categories from Chapter 2.2.6 Literature
# Based on professional decisions and volitional interventions
#################################################################

# Communication Actions - Professional disclosure and information sharing
proeth:CommunicationAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Communication Action"@en ;
    skos:definition "Professional actions involving disclosure, informing, notifying stakeholders, and communicating relevant information per Tolmeijer et al. (2021) explanation requirements and McLaren (2003) transparency obligations."@en ;
    rdfs:comment "Actions involving disclosure, informing, and transparent communication"@en ;
    dcterms:references <https://doi.org/10.1007/s11948-020-00230-4> , # Tolmeijer et al. 2021
                      <https://doi.org/10.1023/A:1024195425598> . # McLaren 2003

proeth:PreventionAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Prevention Action"@en ;
    skos:definition "Professional actions aimed at avoiding, preventing, minimizing, or eliminating risks and harms per Anderson & Anderson (2018) harm prevention principles and Arkin (2008) safety obligations."@en ;
    rdfs:comment "Actions focused on avoiding and minimizing potential harms"@en ;
    dcterms:references <https://doi.org/10.1007/s10676-017-9430-8> , # Anderson & Anderson 2018
                      <https://doi.org/10.1109/MIS.2008.100> . # Arkin 2008

proeth:MaintenanceAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Maintenance Action"@en ;
    skos:definition "Professional actions involving maintaining, upholding, preserving, and protecting professional standards and values per Oakley & Cocking (2001) role requirements and Kong et al. (2020) integrity principles."@en ;
    rdfs:comment "Actions focused on maintaining standards and protecting values"@en ;
    dcterms:references <https://doi.org/10.1017/CBO9780511489471> , # Oakley & Cocking 2001
                      <https://doi.org/10.1007/s10676-020-09538-y> . # Kong et al. 2020

proeth:PerformanceAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Performance Action"@en ;
    skos:definition "Professional actions involving performing, executing, conducting, and implementing professional services within areas of competence per professional obligation frameworks (NSPE II.2)."@en ;
    rdfs:comment "Actions involving execution of professional services and duties"@en ;
    dcterms:references "NSPE Code of Ethics II.2" .

proeth:EvaluationAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Evaluation Action"@en ;
    skos:definition "Professional actions involving evaluating, assessing, analyzing, reviewing, and examining professional work, conditions, or decisions per Berreby et al. (2017) assessment processes and Tolmeijer et al. (2021) situational awareness."@en ;
    rdfs:comment "Actions involving assessment and analysis of professional situations"@en ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> , # Berreby et al. 2017
                      <https://doi.org/10.1007/s11948-020-00230-4> . # Tolmeijer et al. 2021

proeth:CollaborationAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Collaboration Action"@en ;
    skos:definition "Professional actions involving consulting, collaborating, coordinating, and cooperating with colleagues, clients, and stakeholders per Dennis et al. (2016) multi-agent frameworks and professional peer obligations."@en ;
    rdfs:comment "Actions involving professional cooperation and coordination"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

proeth:CreationAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Creation Action"@en ;
    skos:definition "Professional actions involving designing, developing, creating, building, and constructing professional solutions per technical competence requirements and innovation obligations."@en ;
    rdfs:comment "Actions involving design and development of professional solutions"@en ;
    dcterms:references "NSPE Code of Ethics Professional Obligations" .

proeth:MonitoringAction a owl:Class ;
    rdfs:subClassOf proeth-core:Action ;
    rdfs:label "Monitoring Action"@en ;
    skos:definition "Professional actions involving monitoring, supervising, overseeing, managing, and controlling professional processes per Arkin (2008) responsibility documentation and oversight requirements."@en ;
    rdfs:comment "Actions involving supervision and oversight of professional processes"@en ;
    dcterms:references <https://doi.org/10.1109/MIS.2008.100> . # Arkin 2008

# Specific Action Types
:Decision rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdf:type :ActionType ;
    rdfs:subClassOf proeth:EvaluationAction ;
    rdfs:label "Decision"@en ;
    skos:definition "A volitional choice made by an agent in response to an ethical situation, requiring deliberation between alternatives per Hooker & Kim (2018) reasoning-based action theory."@en ;
    rdfs:comment "Professional choice made after ethical deliberation between alternatives"@en ;
    dcterms:references <https://doi.org/10.1007/s11948-018-0030-6> . # Hooker & Kim 2018

proeth:DisclosureAction a owl:Class ;
    rdfs:subClassOf proeth:CommunicationAction ;
    rdfs:label "Disclosure Action"@en ;
    skos:definition "Professional action of revealing conflicts, limitations, or risks to stakeholders per NSPE requirements and transparency principles."@en ;
    rdfs:comment "Action of revealing relevant conflicts or limitations"@en ;
    dcterms:references "NSPE Code of Ethics II.4" .

proeth:CompetenceAction a owl:Class ;
    rdfs:subClassOf proeth:PerformanceAction ;
    rdfs:label "Competence Action"@en ;
    skos:definition "Professional action performed within demonstrated areas of competence per NSPE competence requirements and professional boundaries."@en ;
    rdfs:comment "Action performed within established professional competence"@en ;
    dcterms:references "NSPE Code of Ethics II.2" .

#################################################################
# Event Categories from Chapter 2.2.7 Literature  
# Based on temporal occurrences that trigger ethical consideration
#################################################################

# Crisis Events - Failures and emergency situations
proeth:CrisisEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Crisis Event"@en ;
    skos:definition "Events involving failures, accidents, emergencies, crises, and disasters that require immediate professional response and may override normal procedures per Berreby et al. (2017) automatic event modeling."@en ;
    rdfs:comment "Emergency situations requiring immediate professional response"@en ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> . # Berreby et al. 2017

proeth:ComplianceEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Compliance Event"@en ;
    skos:definition "Events involving violations, breaches, non-compliance, misconduct, or errors that trigger regulatory or professional review processes per Dennis et al. (2016) ethical policy frameworks."@en ;
    rdfs:comment "Events involving breaches of professional or regulatory standards"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

proeth:ConflictEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Conflict Event"@en ;
    skos:definition "Events involving conflicts, disputes, disagreements, controversies, or issues between stakeholders that require professional mediation or resolution per Rao et al. (2023) context-dependent moral evaluation."@en ;
    rdfs:comment "Events involving stakeholder conflicts requiring resolution"@en ;
    dcterms:references <https://doi.org/10.48550/arXiv.2302.00997> . # Rao et al. 2023

proeth:ProjectEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Project Event"@en ;
    skos:definition "Events involving deadlines, milestones, completions, deliveries, and launches that affect project timelines and professional obligations per Sarmiento et al. (2023) temporal reasoning."@en ;
    rdfs:comment "Time-based project events affecting professional obligations"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-023-09609-6> . # Sarmiento et al. 2023

proeth:SafetyEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Safety Event"@en ;
    skos:definition "Events involving injuries, harm, damage, losses, threats, or risks that trigger safety obligations and public welfare protections per Anderson & Anderson (2018) harm-based ethical evaluation."@en ;
    rdfs:comment "Events involving harm or risk requiring safety response"@en ;
    dcterms:references <https://doi.org/10.1007/s10676-017-9430-8> . # Anderson & Anderson 2018

proeth:EvaluationEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Evaluation Event"@en ;
    skos:definition "Events involving inspections, audits, reviews, assessments, and evaluations that trigger professional scrutiny and accountability requirements per Arkin (2008) responsibility documentation."@en ;
    rdfs:comment "Formal review events triggering professional accountability"@en ;
    dcterms:references <https://doi.org/10.1109/MIS.2008.100> . # Arkin 2008

proeth:DiscoveryEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Discovery Event"@en ;
    skos:definition "Events involving discoveries, findings, identifications, detections, or reports of new information that may affect professional obligations per Zhang et al. (2023) moral event classification."@en ;
    rdfs:comment "Events revealing new information affecting professional responsibilities"@en ;
    dcterms:references <https://doi.org/10.18653/v1/2023.findings-emnlp.95> . # Zhang et al. 2023

proeth:ChangeEvent a owl:Class ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Change Event"@en ;
    skos:definition "Events involving changes, modifications, alterations, updates, or revisions to systems, procedures, or requirements that affect professional practice per Almpani et al. (2023) dynamic priority adjustment."@en ;
    rdfs:comment "Events involving changes affecting professional practice requirements"@en ;
    dcterms:references <https://doi.org/10.1007/978-3-031-21203-1_31> . # Almpani et al. 2023

# Specific Event Instances
:Violation rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth:ComplianceEvent ;
    rdfs:label "Violation"@en ;
    skos:definition "An event indicating that an obligation, prohibition, or standard has been breached, requiring corrective action and potentially triggering disciplinary procedures."@en ;
    rdfs:comment "Breach of professional standard requiring corrective response"@en .

proeth:EmergencyEvent a owl:Class ;
    rdfs:subClassOf proeth:CrisisEvent ;
    rdfs:label "Emergency Event"@en ;
    skos:definition "Critical event requiring immediate response that may override normal professional procedures and activate emergency protocols."@en ;
    rdfs:comment "Critical event overriding normal professional procedures"@en .

proeth:DeadlineEvent a owl:Class ;
    rdfs:subClassOf proeth:ProjectEvent ;
    rdfs:label "Deadline Event"@en ;
    skos:definition "Temporal event marking project deadline or milestone that affects professional priorities and resource allocation decisions."@en ;
    rdfs:comment "Time constraint event affecting professional priorities"@en .

proeth:SafetyIncident a owl:Class ;
    rdfs:subClassOf proeth:SafetyEvent ;
    rdfs:label "Safety Incident"@en ;
    skos:definition "Event involving actual or potential harm triggering safety reporting obligations and corrective measures per public welfare protection requirements."@en ;
    rdfs:comment "Incident triggering safety obligations and reporting requirements"@en .

# Event properties for temporal relationships
proeth:triggersObligation a owl:ObjectProperty ;
    rdfs:domain proeth-core:Event ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "triggers obligation"@en ;
    rdfs:comment "Relates an event to obligations it activates"@en .

proeth:causedByAction a owl:ObjectProperty ;
    rdfs:domain proeth-core:Event ;
    rdfs:range proeth-core:Action ;
    rdfs:label "caused by action"@en ;
    rdfs:comment "Links event to actions that caused it (Wright's NESS test)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-023-09609-6> . # Sarmiento et al. 2023

proeth:altersPriority a owl:ObjectProperty ;
    rdfs:domain proeth-core:Event ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "alters priority"@en ;
    rdfs:comment "Indicates how events change obligation priorities"@en .

# Causal-chain class + endpoint edges (Step-3 Stage-5 causal analysis; Sarmiento et al.
# 2023 NESS). cause/effect omit rdfs:range deliberately: their endpoints are Action OR
# Event, and the Action/Event union is enforced at edge materialization by the unified
# domain/range guard (rpo_edges._CAUSAL_EDGE_RANGE) rather than by a blank-node owl:unionOf.
proeth:CausalChain a owl:Class ;
    rdfs:label "Causal Chain"@en ;
    rdfs:comment "A cause-to-effect linkage in the case timeline carrying a NESS responsibility analysis (Sarmiento et al. 2023). Not one of the nine disjoint D-tuple categories."@en .

proeth:analyzesAction a owl:ObjectProperty ;
    rdfs:range proeth-core:Action ;
    rdfs:label "analyzes action"@en ;
    rdfs:comment "Links a synthesis causal-normative-link (reasoning) node to the committed Action it analyzes, so the reasoning is grounded in the graph and the action's obligation edges are reachable from it. Range Action; the subject is a non-D-tuple analysis node, so no domain restriction (and no disjointness impact)."@en .

proeth:cause a owl:ObjectProperty ;
    rdfs:domain proeth:CausalChain ;
    rdfs:label "cause"@en ;
    rdfs:comment "Links a causal chain to the Action or Event that is its cause."@en .

proeth:effect a owl:ObjectProperty ;
    rdfs:domain proeth:CausalChain ;
    rdfs:label "effect"@en ;
    rdfs:comment "Links a causal chain to the Action or Event that is its effect or outcome."@en .

proeth:responsibleAgent a owl:ObjectProperty ;
    rdfs:domain proeth:CausalChain ;
    rdfs:range proeth-core:Agent ;
    rdfs:label "responsible agent"@en ;
    rdfs:comment "Links a causal chain to the agent(s) bearing responsibility for it (NESS causal responsibility, Sarmiento et al. 2023)."@en ;
    dcterms:references <https://doi.org/10.1007/s10458-023-09609-6> .

###############################################################
# OWL-Time Temporal Properties (Allen Interval Algebra)
# Maps to http://www.w3.org/2006/time# vocabulary
###############################################################

proeth:temporalMarker a owl:DatatypeProperty ;
    rdfs:domain [ a owl:Class ; owl:unionOf (proeth-core:Action proeth-core:Event) ] ;
    rdfs:range xsd:string ;
    rdfs:label "temporal marker"@en ;
    rdfs:comment "Narrative temporal marker indicating when an action or event occurred in case time (e.g. 'During preliminary design phase', 'Several months later'). Cases use narrative rather than calendar time."@en .

proeth:temporalSequence a owl:DatatypeProperty ;
    rdfs:domain [ a owl:Class ; owl:unionOf (proeth-core:Action proeth-core:Event) ] ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:label "temporal sequence"@en ;
    rdfs:comment "Chronological position of an action or event within its case, 1-based, no gaps. Populated by an LLM ordering pass over the case's actions and events; consumed by the validation Timeline view to render entries in chronological order. Free-text temporalMarker is the human-readable signal; temporalSequence is the sortable companion."@en .

proeth:TemporalRelation a owl:Class ;
    rdfs:label "Temporal Relation"@en ;
    rdfs:comment "A reified Allen interval algebra relation between two temporal entities (actions or events). Stores both the ProEthica relation name and the corresponding OWL-Time property URI."@en .

proeth:hasTemporalRelation a owl:ObjectProperty ;
    rdfs:domain [ a owl:Class ; owl:unionOf (proeth-core:Action proeth-core:Event) ] ;
    rdfs:range proeth:TemporalRelation ;
    rdfs:label "has temporal relation"@en ;
    rdfs:comment "Links an action or event to a reified Allen interval relation instance."@en .

proeth:fromEntity a owl:ObjectProperty ;
    rdfs:domain proeth:TemporalRelation ;
    rdfs:range [ a owl:Class ; owl:unionOf (proeth-core:Action proeth-core:Event) ] ;
    rdfs:label "from entity"@en ;
    rdfs:comment "The source entity in a temporal relation (Entity1 [relation] Entity2)."@en .

proeth:toEntity a owl:ObjectProperty ;
    rdfs:domain proeth:TemporalRelation ;
    rdfs:range [ a owl:Class ; owl:unionOf (proeth-core:Action proeth-core:Event) ] ;
    rdfs:label "to entity"@en ;
    rdfs:comment "The target entity in a temporal relation (Entity1 [relation] Entity2)."@en .

proeth:allenRelation a owl:DatatypeProperty ;
    rdfs:domain proeth:TemporalRelation ;
    rdfs:range xsd:string ;
    rdfs:label "Allen relation"@en ;
    rdfs:comment "The Allen interval algebra relation name (before, after, meets, overlaps, during, starts, finishes, equals, and their inverses). Maps to OWL-Time properties via services/allen_owl_time_mapper.py."@en .

proeth:owlTimeProperty a owl:DatatypeProperty ;
    rdfs:domain proeth:TemporalRelation ;
    rdfs:range xsd:string ;
    rdfs:label "OWL-Time property"@en ;
    rdfs:comment "The corresponding OWL-Time property name (e.g. time:before, time:intervalMeets). See W3C OWL-Time ontology."@en .

# Common Ethical Concepts
:EthicalDilemma rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:State ; # treat dilemmas as contextual states for decision-making
    rdfs:label "Ethical Dilemma"@en ;
    rdfs:comment "A situation involving a difficult ethical choice between competing moral considerations that applies across all professional domains"@en .

:EthicalPrinciple rdf:type owl:Class ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant
    rdfs:label "Ethical Principle"@en ;
    rdfs:comment "Legacy synonym for Principle. Use :Principle for new concepts."@en ;
    owl:deprecated true ;
    rdfs:seeAlso :Principle .

:ProfessionalObligation rdf:type owl:Class ;
    # NOTE: bfo:BFO_0000017 (realizable entity / SDC) removed, it conflicts with proeth-core:Obligation
    # which is IAO:directive information entity (GDC). BFO GDC and SDC are mutually exclusive,
    # so having both superclasses would make this class unsatisfiable in a reasoning context.
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Professional Obligation"@en ;
    rdfs:comment "A duty or responsibility arising from professional role or standards. As a directive information entity (IAO:0000033 via proeth-core:Obligation), it is a generically dependent continuant, not a realizable entity."@en ;
    skos:changeNote "v2.x: Removed rdfs:subClassOf bfo:BFO_0000017 (realizable entity/SDC). Obligations are directive information entities (GDC), and SDC+GDC dual-inheritance is inconsistent in BFO."@en .

# Obligation Categories from Chapter 2 Literature
# Based on Dennis et al. (2016), Anderson & Anderson, NSPE Code

proeth:DisclosureObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Disclosure Obligation"@en ;
    rdfs:comment "Requirement to inform stakeholders about conflicts, limitations, or risks (NSPE II.3.a)"@en .

proeth:SafetyObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Safety Obligation"@en ;
    rdfs:comment "Duty to hold paramount the safety, health, and welfare of the public (NSPE I.1)"@en .

proeth:CompetenceObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Competence Obligation"@en ;
    rdfs:comment "Requirement to perform services only in areas of competence (NSPE II.2)"@en .

proeth:ConfidentialityObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Confidentiality Obligation"@en ;
    rdfs:comment "Duty to protect confidential information of clients or employers (NSPE III.4)"@en .

proeth:ReportingObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Reporting Obligation"@en ;
    rdfs:comment "Duty to report violations or unsafe conditions to appropriate authorities"@en .

proeth:MandatoryObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Mandatory Obligation"@en ;
    rdfs:comment "Obligations that MUST be fulfilled (deontic force: mandatory)"@en .

proeth:DefeasibleObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Defeasible Obligation"@en ;
    rdfs:comment "Obligations that admit justified exceptions under specified conditions (Ganascia 2007)"@en .

proeth:ConditionalObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Conditional Obligation"@en ;
    rdfs:comment "Obligations that apply only when specific conditions are met"@en .

proeth:PrimaFacieObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Prima Facie Obligation"@en ;
    rdfs:comment "Obligations that hold at first appearance but may be overridden by stronger duties (Anderson & Anderson)"@en .

proeth:LegalObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Legal Obligation"@en ;
    rdfs:comment "Obligations arising from legal requirements and regulations"@en .

proeth:EthicalObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Ethical Obligation"@en ;
    rdfs:comment "Obligations arising from ethical principles beyond legal requirements"@en .

proeth:CollegialObligation a owl:Class ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Collegial Obligation"@en ;
    rdfs:comment "Duties toward professional peers including respect, fairness, and credit for work"@en .

# NSPE Code-specific obligation subclasses used by NSPE BER case ontologies
# (e.g. Case 72, Public Welfare, Knowledge of Information Damaging to Client's Interest).

proeth:FaithfulAgentObligation a owl:Class ;
    rdfs:subClassOf proeth:ConfidentialityObligation ;
    rdfs:label "Faithful Agent Obligation"@en ;
    rdfs:comment "Duty of an engineer to act as a faithful agent or trustee of an employer or client (NSPE Code of Ethics, Section 1 / §II.4). Defeasible under states that confirm public-safety risk."@en .

proeth:PostTermEnvRiskReportingObligation a owl:Class ;
    rdfs:subClassOf proeth:ReportingObligation ;
    rdfs:label "Post-Termination Environmental Risk Reporting Obligation"@en ;
    rdfs:comment "Duty of an engineer to report environmental risks to a pollution-control authority after termination of the client relationship when the risk rises to a public-safety concern (NSPE Code §I.1, §II.1.a, §II.1.c). Derived from the paramount public-welfare principle."@en .

# Obligation properties for temporal and contextual aspects
proeth:hasEnforcementLevel a owl:DatatypeProperty ;  # was owl:ObjectProperty, corrected: range is xsd:string
    rdfs:range xsd:string ;
    rdfs:label "has enforcement level"@en ;
    rdfs:comment "Specifies whether obligation is mandatory, strongly recommended, or recommended"@en ;
    skos:changeNote "v2.x: Changed from owl:ObjectProperty to owl:DatatypeProperty. Properties with rdfs:range xsd:string must be DatatypeProperties."@en .

# Provenance datatype properties used by the extraction client when it
# materializes typed individuals from case narratives. These record the
# narrative source text for a typed individual and the agent to whom an
# obligation is attributed. They are emitted by the LLM extraction client
# described in Section 4 of the KI2026 paper.

proeth:sourcetext a owl:DatatypeProperty ;
    rdfs:range xsd:string ;
    rdfs:label "source text"@en ;
    rdfs:comment "The narrative sentence or clause from a case text that grounds a typed individual. Preserved as a string alongside each extracted State, Action, Event, or Obligation to support provenance and qualitative inspection."@en .

proeth:obligatedparty a owl:DatatypeProperty ;
    rdfs:range xsd:string ;
    rdfs:label "obligated party"@en ;
    rdfs:comment "The agent label to which an obligation is attributed in a case (e.g. 'Engineer Doe'). This is a string rather than an Agent individual so that case text phrasing is preserved verbatim."@en .

proeth:derivedFromPrinciple a owl:ObjectProperty ;
    rdfs:domain proeth-core:Obligation ;
    rdfs:range proeth-core:Principle ;
    rdfs:label "derived from principle"@en ;
    rdfs:comment "Links obligation to the principle(s) it operationalizes (Hallamaa & Kalliokoski 2022)"@en .

proeth:conflictsWith a owl:ObjectProperty ;
    rdfs:domain proeth-core:Obligation ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "conflicts with"@en ;
    rdfs:comment "Indicates potential conflicts between obligations requiring resolution"@en .



# Engineering-specific role types
:EngineerRole rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:label "Engineer Role"@en ;
    rdfs:comment "A professional role involving engineering practice and responsibilities. Occupational archetype head for all engineer specializations and extracted engineer-role leaves."@en ;
    skos:closeMatch ifcrole:Engineer ;
    :archetypeAxis "occupational" ;
    skos:altLabel "engineer"@en, "engineering"@en ;
    rdfs:subClassOf :ProfessionalRole .

# Role specializations for classification of roles mentioned in guidelines and cases
:ProfessionalRole rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Role ;
    rdfs:label "Professional Role"@en ;
        rdfs:comment "A role within a profession that entails recognized ends/goals of practice (e.g., safeguarding public safety, delivering competent technical solutions) and a coherent set of obligations codified in standards and codes (e.g., NSPE). Often associated with licensure or formal accountability. Examples: Professional Engineer, Project Manager, Public Official."@en ;
        # Professional roles characteristically bear obligations and are governed by codes
        # v2.4.2: Fixed namespace references -- :Obligation and :hasObligation resolved to
        # intermediate namespace where they were never defined. Corrected to proeth-core:.
        rdfs:subClassOf [ a owl:Restriction ;
                                         owl:onProperty proeth-core:hasObligation ;
                                         owl:someValuesFrom proeth-core:Obligation
                                     ] ;
        rdfs:subClassOf [ a owl:Restriction ;
                                         owl:onProperty :governedByCode ;
                                         owl:someValuesFrom :EthicalCode
                                     ] .

:ParticipantRole rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Role ;
    rdfs:label "Participant Role"@en ;
    rdfs:comment "A role of an involved party or stakeholder that does not itself establish professional obligations (e.g., Client, The Public, Community Member)."@en .

# Alias for clarity when classifying roles extracted from text
:StakeholderRole rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Stakeholder Role"@en ;
    rdfs:comment "A participant role borne by stakeholders such as Clients, Employers, and the Public. Typically not the bearer of professional obligations, but may be linked to principles in explicit statements."@en .

# Keep ProfessionalRole and ParticipantRole disjoint to avoid mixing semantics
:ProfessionalRole owl:disjointWith :ParticipantRole .

# Relational axis head. The duty-relationship archetypes below classify the
# relationship a role establishes (provider-client, professional-peer, employer),
# orthogonal to the occupational axis (ProfessionalRole/ParticipantRole). A
# relational archetype spans both occupational sides (a provider-client relation
# has a professional provider and a participant client), so it sits under
# RelationalRole, NOT under either side of the occupational disjointness;
# otherwise composing it with a Participant-side occupational archetype (e.g.
# ClientRole) would be unsatisfiable.
:RelationalRole rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Role ;
    rdfs:label "Relational Role"@en ;
    :archetypeAxis "relational" ;
    rdfs:comment "Head of the relational archetype axis: the duty-relationship a role establishes. Orthogonal to the occupational axis, so a relational archetype composes with any occupational archetype without crossing the ProfessionalRole/ParticipantRole disjointness."@en .

#################################################################
# Professional Role Categories from Chapter 2.2.1 Literature
#################################################################

# Based on Kong et al. (2020) empirical analysis and Dennis et al. (2016) role-based filtering

:ProviderClientRole rdf:type owl:Class ;
    rdfs:subClassOf :RelationalRole ;
    rdfs:label "Provider-Client Role" ;
    skos:definition "Professional role defining relationships between service providers and their clients, creating duties of competent service delivery, confidentiality, and client welfare per Kong et al. (2020) identity role analysis." ;
    rdfs:comment "Service delivery relationship with duties of competence and care" ;
    dcterms:references <https://doi.org/10.1007/s10676-020-09524-4> . # Kong et al. 2020

:ProfessionalPeerRole rdf:type owl:Class ;
    rdfs:subClassOf :RelationalRole ;
    rdfs:label "Professional Peer Role" ;
    skos:definition "Professional role defining relationships between practitioners within the same professional domain, creating obligations for peer review, professional development, knowledge sharing, and standard maintenance per Kong et al. (2020)." ;
    rdfs:comment "Collegial relationship with mentoring and review obligations" ;
    dcterms:references <https://doi.org/10.1007/s10676-020-09524-4> . # Kong et al. 2020

:EmployerRelationshipRole rdf:type owl:Class ;
    rdfs:subClassOf :RelationalRole ;
    rdfs:label "Employer Relationship Role" ;
    skos:definition "Professional role defining relationships between professionals and their employing organizations, creating duties of loyalty, competent performance, and honest reporting while maintaining professional independence per Wendel (2024) moral complexity framework." ;
    rdfs:comment "Organizational relationship balancing loyalty and independence" ;
    dcterms:references <https://doi.org/10.1093/oso/9780198863335.001.0001> . # Wendel 2024

:PublicResponsibilityRole rdf:type owl:Class ;
    rdfs:subClassOf :RelationalRole ;
    rdfs:label "Public Responsibility Role" ;
    skos:definition "Professional role defining obligations to the broader public and society, creating duties of public welfare protection that can override client or employer interests per Thornton et al. (2017) collective morality framework." ;
    rdfs:comment "Societal obligation that can override other professional duties" ;
    dcterms:references <https://doi.org/10.1080/10508422.2017.1318069> . # Thornton et al. 2017

# Ends / Goals of roles
:End rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant
    rdfs:label "End/Goal"@en ;
    rdfs:comment "A characteristic end or goal toward which a role is directed (e.g., in engineering: protecting public safety, serving the public welfare, providing competent service)."@en .

# Standards and regulatory frameworks
:Standard rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Standard"@en ;
    rdfs:comment "A documented agreement containing technical specifications or criteria for professional practice"@en .

:EthicalCode rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Guideline ;
    rdfs:label "Ethical Code"@en ;
    rdfs:comment "A formal document that codifies ethical principles and professional conduct requirements for a profession. As a document (IAO:0000310 via Guideline), it contains principles, obligations, and constraints -- it is not itself a principle."@en ;
    skos:changeNote "v2.4.2: Changed rdfs:subClassOf from proeth-core:Principle to proeth-core:Guideline. An ethical code is a document that contains principles, obligations, and constraints. Classifying it as a Principle conflated the container with its contents."@en .

# Specialized capability types
:TechnicalCapability rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Technical Capability"@en ;
    rdfs:comment "A specialized technical skill or competency in a professional domain"@en .

# Problem and issue types
:EthicalIssue rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Ethical Issue"@en ;
    rdfs:comment "A problematic situation involving ethical considerations or conflicts"@en .

# Measurement and assessment types
:Measurement rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Measurement"@en ;
    rdfs:comment "A quantitative or qualitative assessment or evaluation"@en .

#################################################################
#    Normative refinements (subclasses, non-breaking)            
#################################################################

# Modalities (kept as subclasses to avoid new primaries)
:Permission rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Permission"@en ;
    rdfs:comment "A normative allowance indicating that an action or state is permitted under certain conditions."@en .

:Prohibition rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Obligation ;
    rdfs:label "Prohibition"@en ;
    rdfs:comment "A normative restriction indicating that an action or state is disallowed."@en .

# Compliance tracking
# :Violation is declared once above (subClassOf :ComplianceEvent, with a fuller
# definition); the duplicate declaration that stood here (subClassOf proeth-core:Event)
# was removed 2026-05-30.

# Explainability / rationale
:Justification rdf:type owl:Class ;
    rdf:type :EntityType ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Justification"@en ;
    rdfs:comment "A rationale, argument, or evidence artifact supporting a decision or interpretation in an ethical case."@en .

#################################################################
#    Annotation properties                                        
#################################################################

:hasValueLabel rdf:type owl:AnnotationProperty ;
    rdfs:label "has value label"@en ;
    rdfs:comment "Annotation for recording the value-oriented reading of a principle (e.g., 'Integrity', 'Justice')."@en ;
    rdfs:domain proeth-core:Principle ;
    rdfs:range xsd:string .

#################################################################
#    Object Properties                                           
#################################################################

:hasRole rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:hasRole ;
    owl:deprecated true ;
    rdfs:domain bfo:BFO_0000004 ; # independent continuant
    rdfs:range proeth-core:Role ;
    rdfs:label "has role"@en ;
    rdfs:comment "Relates an entity to a role it bears. DEPRECATED: use proeth-core:hasRole."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:hasRole. Added owl:equivalentProperty to bridge existing references."@en .

:hasCondition rdf:type owl:ObjectProperty ;
    rdfs:domain bfo:BFO_0000015 ; # process
    rdfs:range proeth-core:State ;
    rdfs:label "has condition"@en ;
    rdfs:comment "Relates a process to a state that affects it"@en ;
    owl:deprecated true .

:hasState rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:hasState ;
    owl:deprecated true ;
    rdfs:domain bfo:BFO_0000015 ; # process
    rdfs:range proeth-core:State ;
    rdfs:label "has state"@en ;
    rdfs:comment "Relates a process to a state that affects it. DEPRECATED: use proeth-core:hasState."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:hasState. Added owl:equivalentProperty to bridge existing references."@en .

:hasResource rdf:type owl:ObjectProperty ;
    rdfs:domain bfo:BFO_0000015 ; # process
    rdfs:range proeth-core:Resource ;
    rdfs:label "has resource"@en ;
    rdfs:comment "Relates a process to a resource it uses"@en ;
    skos:changeNote "v2.4.2: Fixed range from :Resource (undefined in intermediate namespace) to proeth-core:Resource."@en .

:performsAction rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:performsAction ;
    owl:deprecated true ;
    rdfs:domain bfo:BFO_0000040 ; # material entity
    rdfs:range proeth-core:Action ;
    rdfs:label "performs action"@en ;
    rdfs:comment "Relates an agent to an action they perform. DEPRECATED: use proeth-core:performsAction."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:performsAction. Added owl:equivalentProperty to bridge existing references."@en .

:hasCapability rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:hasCapability ;
    owl:deprecated true ;
    rdfs:domain bfo:BFO_0000040 ; # material entity
    rdfs:range proeth-core:Capability ;
    rdfs:label "has capability"@en ;
    rdfs:comment "Relates an entity to a capability it possesses. DEPRECATED: use proeth-core:hasCapability."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:hasCapability. Added owl:equivalentProperty to bridge existing references."@en .

:guidedByPrinciple rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Principle ;
    rdfs:label "guided by principle"@en ;
    rdfs:comment "Relates an action to a principle that guides it"@en .

:fulfillsObligation rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:fulfillsObligation ;
    owl:deprecated true ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "fulfills obligation"@en ;
    rdfs:comment "Relates an action to an obligation it fulfills. DEPRECATED: use proeth-core:fulfillsObligation."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:fulfillsObligation. Added owl:equivalentProperty to bridge existing references."@en .

:violatesObligation rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "violates obligation"@en ;
    rdfs:comment "Relates an action to an obligation it violates"@en .

:raisesObligation rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "raises obligation"@en ;
    rdfs:comment "Relates an action to an obligation it puts at stake but does not itself resolve. The fulfillment or violation occurs at a downstream action in the same chain. Distinguishes upstream choices that engage an obligation from the downstream actions that satisfy or breach it; without this third predicate, the same obligation appears as both fulfilled and violated across adjacent steps."@en .

:constrainedBy rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:constrainedBy ;
    owl:deprecated true ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Constraint ;
    rdfs:label "constrained by"@en ;
    rdfs:comment "Relates an action to a constraint that limits or shapes it. DEPRECATED: use proeth-core:constrainedBy."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:constrainedBy. Added owl:equivalentProperty to bridge existing references."@en .

:hasAgentRole rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Action ;
    rdfs:range proeth-core:Role ;
    rdfs:label "has agent role"@en ;
    rdfs:comment "Relates an action to the role of the agent performing it"@en .

# Properties connecting roles to obligations and principles
:hasObligation rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:hasObligation ;
    owl:deprecated true ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "has obligation"@en ;
    rdfs:comment "Relates a role to the professional obligations borne by entities bearing that role. DEPRECATED: use proeth-core:hasObligation."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:hasObligation. Added owl:equivalentProperty to bridge existing references."@en .

:adheresToPrinciple rdf:type owl:ObjectProperty ;
    owl:equivalentProperty proeth-core:adheresToPrinciple ;
    owl:deprecated true ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Principle ;
    rdfs:label "adheres to principle"@en ;
    rdfs:comment "Relates a role to ethical principles that normatively govern that role. DEPRECATED: use proeth-core:adheresToPrinciple."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-core:adheresToPrinciple. Added owl:equivalentProperty to bridge existing references."@en .

:pursuesEnd rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range :End ;
    rdfs:label "pursues end"@en ;
    rdfs:comment "Relates a role to its characteristic ends/goals."@en .

:governedByCode rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range :EthicalCode ;
    rdfs:label "governed by code"@en ;
    rdfs:comment "Relates a professional role to an ethical code that formalizes its obligations and norms."@en .

#################################################################
#    Role-to-Role Instance Relations
#################################################################

# These properties model professional relationships between role instances
# Used in case extraction to capture organizational and supervisory structures

:retainedBy rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    rdfs:label "retained by"@en ;
    rdfs:comment "Professional retained by client or organization"@en .

:retains rdf:type owl:ObjectProperty ;
    owl:inverseOf :retainedBy ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    rdfs:label "retains"@en ;
    rdfs:comment "Client or organization that retains a professional"@en .

:employedBy rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    rdfs:label "employed by"@en ;
    rdfs:comment "Professional employed by organization"@en .

:employs rdf:type owl:ObjectProperty ;
    owl:inverseOf :employedBy ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    rdfs:label "employs"@en ;
    rdfs:comment "Organization that employs a professional"@en .

:supervises rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :supervisedBy ;
    rdfs:label "supervises"@en ;
    rdfs:comment "Role supervises another role in organizational hierarchy"@en .

:supervisedBy rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :supervises ;
    rdfs:label "supervised by"@en ;
    rdfs:comment "Role is supervised by another role"@en .

:mentors rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :mentoredBy ;
    rdfs:label "mentors"@en ;
    rdfs:comment "Role mentors another role in professional development"@en .

:mentoredBy rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :mentors ;
    rdfs:label "mentored by"@en ;
    rdfs:comment "Role is mentored by another role"@en .

:collaboratesWith rdf:type owl:ObjectProperty ;
    rdf:type owl:SymmetricProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    rdfs:label "collaborates with"@en ;
    rdfs:comment "Role collaborates with another role as peers"@en .

:reportsTo rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :receivesReportFrom ;
    rdfs:label "reports to"@en ;
    rdfs:comment "Role reports to another role in organizational structure"@en .

:receivesReportFrom rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Role ;
    owl:inverseOf :reportsTo ;
    rdfs:label "receives report from"@en ;
    rdfs:comment "Role receives reports from another role"@en .

#################################################################
#    Provision-Concept Relationships
#################################################################

# These properties link ethical code provisions to the concepts they establish
# Used to trace how specific code sections ground principles, obligations, and constraints

:establishes rdf:type owl:ObjectProperty ;
    rdfs:domain proeth-core:Resource ;
    rdfs:range [ rdf:type owl:Class ;
                 owl:unionOf ( proeth-core:Principle proeth-core:Obligation proeth-core:Constraint ) ] ;
    rdfs:label "establishes"@en ;
    rdfs:comment "Relates a code provision to the ethical concepts (Principles, Obligations, Constraints) it establishes or reinforces. For example, NSPE Canon I.1 establishes the Public Safety Principle."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> . # McLaren 2003 - extensional grounding

:establishedBy rdf:type owl:ObjectProperty ;
    owl:inverseOf :establishes ;
    rdfs:domain [ rdf:type owl:Class ;
                  owl:unionOf ( proeth-core:Principle proeth-core:Obligation proeth-core:Constraint ) ] ;
    rdfs:range proeth-core:Resource ;
    rdfs:label "established by"@en ;
    rdfs:comment "Inverse of establishes. Relates an ethical concept to the code provision(s) that establish it. For example, Public Safety Principle is established by NSPE Canon I.1."@en .

#################################################################
#    State Classes - Based on Chapter 2.2.4 Literature Review
#################################################################

# =================================================================
# STATE ARCHETYPES (deontic-function axis) -- added 2026-05-30
# =================================================================
# A state's KIND is grounded by its deontic function within the role-based
# structure: a state matters because of what it does to a role-derived obligation.
# This keeps states role-relative (the framework's premise) rather than abstracting
# them into a content taxonomy, and requires no virtue-ethics commitment. The nine
# archetypes are the recurring deontic functions a state performs on an obligation:
# activating it, constraining the action it governs, putting it in conflict/defeat,
# conditioning it on capacity or on knowledge, scoping it to a relationship, or
# bounding it in time. Each is realized by the proeth-core state edges
# (activatesObligation, activatesConstraint, defeasibleUnder, activatedByEvent /
# terminatedByEvent), so the category axis is the static shadow of those edges.
#
# Grounding: Berreby et al. (2017) Event-Calculus fluents that trigger and terminate
# obligations; Almpani et al. (2023) context-based scenarios that set dynamic
# obligation priorities; Sarmiento et al. (2023) causal chains that initiate states;
# Stenseke (2024) obligation-presupposes-capacity; Govindarajulu & Bringsjord (2017)
# obligation's dependence on knowledge state. NOT a Jones (1991) typology: Jones moral
# intensity SCORES a situation's salience (a state attribute, e.g. urgency_level); it
# does not classify state kinds. The archetypes are intentionally non-disjoint -- a
# single state often performs several deontic functions at once (a risk that also
# creates a conflict).
# =================================================================

:RiskState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Risk State"@en ;
    skos:definition "A condition of potential harm to public welfare, safety, or a protected interest. Its deontic function is to ACTIVATE the protective obligations a role exists to discharge, and to license defeat of competing obligations such as confidentiality when the harm is grave, per Berreby et al. (2017) and the dynamic priority tiers of Almpani et al. (2023)."@en ;
    rdfs:comment "Obligation-activating condition of potential harm (realized by activatesObligation / defeasibleUnder)."@en ;
    skos:scopeNote "Deontic-function archetype; case-specific risk states subclass this. The salience of the risk (magnitude, probability, immediacy) is a state ATTRIBUTE (Jones 1991), not a subkind."@en ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> , # Berreby et al. 2017
                       <https://doi.org/10.1007/978-3-031-21203-1_31> . # Almpani et al. 2023

:EmergencyState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Emergency State"@en ;
    skos:definition "An acute, time-critical condition demanding immediate response. Its deontic function is to activate emergency-response obligations and to override or suspend constraints that normally bound action, per the emergency-priority determination of Almpani et al. (2023)."@en ;
    rdfs:comment "Obligation-activating, constraint-overriding acute condition."@en ;
    skos:scopeNote "Deontic-function archetype; distinguished from RiskState by acuteness that licenses overriding ordinary constraints."@en ;
    dcterms:references <https://doi.org/10.1007/978-3-031-21203-1_31> . # Almpani et al. 2023

:ConflictState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Conflict State"@en ;
    skos:definition "A condition under which two or more role-derived obligations compete and cannot all be fully satisfied. Its deontic function is to render obligations defeasible against one another: it is the licensing context of the defeasibility relation, where an Obligation is defeasibleUnder a Conflict State."@en ;
    rdfs:comment "Obligation-competing context (realized by defeasibleUnder; the prima-facie-duty conflict situation)."@en ;
    skos:scopeNote "Deontic-function archetype; case-specific conflict states (ConflictOfInterest, CompetingDuties) subclass this. Grounds the competesWith / prevailsOver / defeasibleUnder edge family."@en .

:CompetenceState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Competence State"@en ;
    skos:definition "A condition bearing on whether a role-bearer has the capacity -- expertise, qualification, means -- to fulfil a duty. Its deontic function is to condition an obligation on capacity: obligation presupposes capacity, so a competence shortfall renders the duty defeasible or shifts it (for example to refer or disclose), per Stenseke (2024)."@en ;
    rdfs:comment "Capacity-conditioning condition (ought-implies-can)."@en ;
    skos:scopeNote "Deontic-function archetype; case-specific competence states (OutsideCompetence) subclass this."@en ;
    dcterms:references <https://doi.org/10.1007/s10676-024-09775-5> . # Stenseke 2024

:RelationshipState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Relationship State"@en ;
    skos:definition "A condition defining which professional relationship holds among the parties (provider-client, professional-peer, employer-employee, public trust). Its deontic function is to SCOPE which relational obligations apply, since duties are relative to the role-relationship in force."@en ;
    rdfs:comment "Obligation-scoping condition (which role-relation, hence which relational duties, are active)."@en ;
    skos:scopeNote "Deontic-function archetype; pairs with the relational role archetypes (ProviderClientRole, ProfessionalPeerRole, ...). The relationship in force selects the applicable obligations."@en .

:InformationState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Information State"@en ;
    skos:definition "An epistemic condition: what is known, disclosed, uncertain, or concealed. Its deontic function is to condition obligations on the agent's knowledge state, governing disclosure, notification, informed-consent, and decision-under-uncertainty duties, per Govindarajulu & Bringsjord (2017) on the dependence of obligation on intention and knowledge."@en ;
    rdfs:comment "Epistemic condition conditioning disclosure / informed obligations."@en ;
    skos:scopeNote "Deontic-function archetype; covers states of disclosure, notification, concealment, and uncertainty."@en ;
    dcterms:references <https://doi.org/10.1609/aimag.v38i2.2743> . # Govindarajulu & Bringsjord 2017

:RegulatoryState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Regulatory State"@en ;
    skos:definition "A condition in which a code provision, standard, statute, or contractual requirement is in force for the situation. Its deontic function is to ACTIVATE a constraint or compliance obligation on the available actions (the State-to-Constraint linkage)."@en ;
    rdfs:comment "Constraint-activating condition (realized by activatesConstraint)."@en ;
    skos:scopeNote "Deontic-function archetype; the state under which a regulatory constraint becomes binding for the case."@en .

:TemporalState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Temporal State"@en ;
    skos:definition "A condition defined by phase or timing (pre/post-termination, before/after notification, a deadline window). Its deontic function is to bound when a time-relative obligation holds: the state is the Event-Calculus fluent whose initiation and termination start and end the obligation, per Berreby et al. (2017)."@en ;
    rdfs:comment "Obligation-bounding condition (Event-Calculus fluent; realized by activatedByEvent / terminatedByEvent)."@en ;
    skos:scopeNote "Deontic-function archetype; the persistence of the fluent (inertial vs non-inertial) is an orthogonal ATTRIBUTE, not a subkind."@en ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> . # Berreby et al. 2017

:ResourceAvailabilityState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Resource Availability State"@en ;
    skos:definition "A condition of availability or scarcity of the means to act (time, budget, personnel, safeguards, access to information). Its deontic function is to condition the FEASIBILITY of obligations and to set dynamic priorities among them when means are constrained, per Almpani et al. (2023)."@en ;
    rdfs:comment "Feasibility-conditioning condition of resource availability or scarcity."@en ;
    skos:scopeNote "Deontic-function archetype; distinct from the Resource (Rs) component, which is a knowledge artifact. This is the situational availability of the means to act."@en ;
    dcterms:references <https://doi.org/10.1007/978-3-031-21203-1_31> . # Almpani et al. 2023

# =================================================================
# Case-specific state leaves (grouped below by the same deontic categories;
# subclass the archetypes above as the corpus is re-extracted).
# =================================================================

# Conflict States - Context where competing interests or obligations arise

:ConflictOfInterest a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Conflict of Interest State" ;
    skos:definition "Environmental state where a professional has personal interests that could influence their professional judgment or decision-making, requiring disclosure and management according to Dennis et al. (2016) context-aware ethical reasoning framework." ;
    rdfs:comment "Professional situation where personal and professional interests compete" ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

:CompetingDuties a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Competing Duties State" ;
    skos:definition "Context where multiple professional obligations conflict and cannot all be fully satisfied simultaneously, requiring prioritization based on Rao et al. (2023) context-dependent moral evaluation." ;
    rdfs:comment "State requiring ethical prioritization between conflicting obligations" ;
    dcterms:references <https://doi.org/10.48550/arXiv.2302.00997> . # Rao et al. 2023

proeth:ConfirmedRiskWithoutAdequateSafeguardsState a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Confirmed Risk Without Adequate Safeguards State"@en ;
    rdfs:comment "State in which a professional has confirmed the existence of a concrete public-safety or environmental risk and adequate safeguards are known to be absent. Typical activator for post-termination reporting obligations and for defeating faithful-agent confidentiality (NSPE BER Case 72 pattern)."@en .

# Risk States - Environmental conditions involving potential harm

:PublicSafetyAtRisk a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Public Safety at Risk" ;
    skos:definition "Environmental condition where actions or conditions pose potential harm to public health, safety, or welfare, elevating safety obligations per Berreby et al. (2017) Event Calculus state representation." ;
    rdfs:comment "Critical state triggering heightened safety obligations" ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> . # Berreby et al. 2017

:EnvironmentalHazard a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Environmental Hazard Present" ;
    skos:definition "State where environmental conditions pose risks requiring professional intervention or mitigation according to Almpani et al. (2023) dynamic priority determination framework." ;
    rdfs:comment "Environmental risk state requiring assessment and action" ;
    dcterms:references <https://doi.org/10.1007/978-3-031-21203-1_31> . # Almpani et al. 2023

# Competence States - Professional capability boundaries

:OutsideCompetence a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Outside Area of Competence" ;
    skos:definition "State where professional lacks the expertise, training, or qualification to perform requested services, limiting available actions per competence-based ethical constraints." ;
    rdfs:comment "Competence boundary preventing service provision" .

:QualifiedToPerform a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Qualified to Perform" ;
    skos:definition "Positive competence state where professional has demonstrated expertise and authorization to perform specific services within defined scope of practice." ;
    rdfs:comment "Competence state enabling professional action" .

# Relationship States - Professional relationship contexts

:ClientRelationship a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Client Relationship Established" ;
    skos:definition "Relational state where formal professional-client relationship exists with associated fiduciary duties, confidentiality requirements, and professional boundaries." ;
    rdfs:comment "Active professional relationship with associated obligations" .

:EmploymentTerminated a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Employment Terminated" ;
    skos:definition "Post-employment state where professional relationship has ended but residual obligations for confidentiality and non-competition may persist." ;
    rdfs:comment "Post-employment state with continuing obligations" .

# Information States - Data and knowledge contexts

:ConfidentialInformation a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Confidential Information Held" ;
    skos:definition "Information state where professional possesses data subject to confidentiality obligations, restricting disclosure per professional ethics requirements." ;
    rdfs:comment "State triggering information protection obligations" .

:PublicInformation a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Public Information Available" ;
    skos:definition "Open information state where relevant data is publicly accessible without confidentiality restrictions, enabling unrestricted professional use." ;
    rdfs:comment "State permitting open information use" .

# Emergency States - Critical temporal conditions

:EmergencySituation a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Emergency Situation" ;
    skos:definition "Critical temporal state requiring immediate response that may override normal procedures, represented as non-inertial fluent per Berreby et al. (2017) Event Calculus formalism." ;
    rdfs:comment "Urgent state overriding normal protocols" ;
    dcterms:references <https://doi.org/10.1016/j.artint.2017.12.003> . # Berreby et al. 2017

:CrisisConditions a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Crisis Conditions" ;
    skos:definition "Extended emergency state of systemic disruption requiring coordinated professional response with adapted obligations and priorities." ;
    rdfs:comment "Sustained emergency requiring coordinated response" .

# Regulatory States - Legal and compliance contexts

:RegulatoryCompliance a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Regulatory Compliance State" ;
    skos:definition "State where specific regulatory requirements are in effect, constraining professional actions and decisions per jurisdictional requirements." ;
    rdfs:comment "Legal compliance context constraining actions" .

:NonCompliant a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Non-Compliant State" ;
    skos:definition "Problematic state where applicable standards or regulations are not being met, requiring immediate corrective action." ;
    rdfs:comment "State requiring compliance remediation" .

# Temporal States - Time-dependent conditions

:DeadlineApproaching a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Deadline Approaching" ;
    skos:definition "Temporal state where time constraints intensify, potentially affecting quality-safety tradeoffs per Sarmiento et al. (2023) causal reasoning framework." ;
    rdfs:comment "Time pressure state affecting decision priorities" ;
    dcterms:references <https://doi.org/10.1609/aaai.v37i5.25774> . # Sarmiento et al. 2023

:ExtendedTimeframe a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Extended Timeframe Available" ;
    skos:definition "Temporal state where sufficient time exists for thorough analysis and stakeholder consultation, enabling comprehensive ethical deliberation." ;
    rdfs:comment "State enabling thorough deliberation" .

# Resource States - Availability and constraint contexts

:ResourceConstrained a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Resource Constrained" ;
    skos:definition "State where limited resources (budget, personnel, materials) constrain available options and require allocation decisions." ;
    rdfs:comment "Resource limitation affecting available actions" .

:ResourceAvailable a owl:Class ;
    rdfs:subClassOf proeth-core:State ;
    rdfs:label "Resources Available" ;
    skos:definition "State where sufficient resources exist to implement optimal solutions without significant constraints." ;
    rdfs:comment "Resource sufficiency enabling full options" .

#################################################################
#    Professional Resource Types (Chapter 2.2.3 - McLaren 2003)
#################################################################

# Professional resources provide extensional grounding for ethical decision-making
# Based on McLaren (2003) extensional principles approach

# Resource-type attributions corrected 2026-05-30 (verified against the reference
# corpus): McLaren grounds the precedent/interpretation types; professional codes are
# Frankel/Davis; the remaining four are practical (house) extensions, not attributable
# to a cited ethics-reasoning source. See each class's skos:scopeNote.

:ProfessionalCode rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Professional Code" ;
    skos:definition "Formal codified professional ethics standards (e.g., NSPE Code, IEEE Code) that establish professional identity, create accountability, and provide deliberation frameworks beyond mere rules. As an ethics knowledge resource the code is grounded in Frankel (1989), who frames it as an enabling document and a distillation of collective professional experience, and Davis (1991), who frames it as a convention among professionals." ;
    rdfs:comment "Distillations of collective experience that guide and justify actions" ;
    skos:scopeNote "Attribution: Frankel (1989) 'Professional Codes: Why, How, and with What Impact?' and Davis (1991) 'Thinking Like an Engineer'. McLaren (2003) USES codes as extensional inputs but does not originate this resource type (the prior blanket McLaren citation was corrected)." .

:CasePrecedent rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Case Precedent" ;
    skos:definition "Documented cases from ethics review boards providing precedential knowledge and analogical reasoning patterns for similar situations, grounding abstract principles in professional reality per McLaren (2003): citing past cases provides the extensional definition of the principles." ;
    rdfs:comment "Concrete instances that exemplify principle application" ;
    skos:scopeNote "Attribution: McLaren (Ashley & McLaren 1995; McLaren 2003, SIROCCO). This is McLaren's core contribution to the Resource component." ;
    dcterms:references <https://doi.org/10.1023/A:1024195425598> .

:ExpertInterpretation rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Expert Interpretation" ;
    skos:definition "Authoritative explanations bridging principles to specific contexts, providing nuanced understanding of how principles apply in complex situations. Per McLaren (2003), the review board's explanations of how and why codes apply operationalize the abstract principles." ;
    rdfs:comment "Professional consensus on principle application in edge cases" ;
    skos:scopeNote "Attribution: McLaren (2003) -- the expert/board explanation that links codes to facts." ;
    dcterms:references <https://doi.org/10.1023/A:1024195425598> .

:TechnicalStandard rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Technical Standard" ;
    skos:definition "Industry standards and specifications defining acceptable practice (e.g., ISO, IEEE, ASME standards) that embody collective professional agreement on technical acceptability and minimum competence benchmarks." ;
    rdfs:comment "Collective professional agreement on technical acceptability" ;
    skos:scopeNote "House extension (engineering domain): technical standards treated as an ethics knowledge resource. Not directly attributable to a cited ethics-reasoning source (the prior McLaren citation was removed)." .

:LegalResource rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Legal Resource" ;
    skos:definition "Laws, regulations, and statutes governing professional practice that establish legal boundaries and compliance requirements for professional activities." ;
    rdfs:comment "Legal framework constraining professional practice" ;
    skos:scopeNote "House extension with roots in legal case-based reasoning (Bench-Capon & Sartor 2003); treating legal materials as an ethics resource reflects the society-profession nexus (Frankel 1989)." .

:DecisionTool rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Decision Tool" ;
    skos:definition "Frameworks, methodologies, and assessment tools for ethical analysis that provide structured approaches to ethical decision-making in professional contexts." ;
    rdfs:comment "Structured approaches for ethical analysis" ;
    skos:scopeNote "House extension: decision-support and ethics-workup schemas formalized as a distinct resource type. Not directly attributable to a cited source." .

:ReferenceMaterial rdf:type owl:Class ;
    rdfs:subClassOf proeth-core:Resource ;
    rdfs:label "Reference Material" ;
    skos:definition "Handbooks, manuals, guides, and other documentation supporting professional practice with technical and procedural knowledge." ;
    rdfs:comment "Supporting documentation for professional practice" ;
    skos:scopeNote "House extension grounded structurally in the Information Artifact Ontology: documents and manuals as Information Content Entities (iao:0000030, the parent of proeth-core:Resource). Not from a cited ethics source." .

# Specific instances of professional codes (examples)
:NSPECodeOfEthics rdf:type owl:NamedIndividual ;
    rdf:type :ProfessionalCode ;
    rdfs:label "NSPE Code of Ethics" ;
    skos:definition "The National Society of Professional Engineers' Code of Ethics establishing fundamental canons, rules of practice, and professional obligations for engineers." ;
    rdfs:comment "Primary ethical framework for professional engineers in the United States" .

#################################################################
# Constraint Categories from Chapter 2.2.9 Literature
# Based on Ganascia (2007), Dennis et al. (2016), Taddeo et al. (2024)
#################################################################

# Boundary Type Constraints
proeth:LegalConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Legal Constraint"@en ;
    rdfs:comment "Constraints arising from legal requirements and statutes that establish inviolable boundaries (Kroll 2020, Stenseke 2024)"@en ;
    dcterms:references <https://doi.org/10.1007/s00146-020-00965-5> . # Kroll 2020

proeth:RegulatoryConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Regulatory Constraint"@en ;
    rdfs:comment "Constraints from regulatory bodies and professional standards organizations (Taddeo et al. 2024)"@en ;
    dcterms:references <https://doi.org/10.1007/s00146-024-01870-x> . # Taddeo et al. 2024

proeth:ResourceConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Resource Constraint"@en ;
    rdfs:comment "Limitations on available time, budget, materials, or human resources (Ganascia 2007)"@en ;
    dcterms:references <https://doi.org/10.1007/s11023-007-9079-x> . # Ganascia 2007

proeth:CompetenceConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Competence Constraint"@en ;
    rdfs:comment "Boundaries defined by agent capabilities and technical limitations (Hallamaa & Kalliokoski 2022)"@en ;
    dcterms:references <https://doi.org/10.1080/08989621.2022.2054267> . # Hallamaa & Kalliokoski 2022

proeth:JurisdictionalConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Jurisdictional Constraint"@en ;
    rdfs:comment "Boundaries of authority and geographical or organizational scope (Dennis et al. 2016)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

proeth:ProceduralConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Procedural Constraint"@en ;
    rdfs:comment "Requirements for following specific processes or protocols (Furbach et al. 2014)"@en ;
    dcterms:references <https://doi.org/10.1007/s13218-014-0309-0> . # Furbach et al. 2014

# Defeasibility Type Constraints
proeth:DefeasibleConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Defeasible Constraint"@en ;
    rdfs:comment "Constraints that admit justified exceptions under specified conditions (Ganascia 2007)"@en ;
    dcterms:references <https://doi.org/10.1007/s11023-007-9079-x> . # Ganascia 2007

proeth:InviolableConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Inviolable Constraint"@en ;
    rdfs:comment "Absolute constraints that cannot be overridden under any circumstances (Dennis et al. 2016)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

# Ethical Boundary Type Constraints
proeth:EthicalConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Ethical Constraint"@en ;
    rdfs:comment "Professional ethical boundaries beyond legal requirements (Benzmüller et al. 2020)"@en ;
    dcterms:references <https://doi.org/10.1007/s10817-018-9507-z> . # Benzmüller et al. 2020

proeth:SafetyConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Safety Constraint"@en ;
    rdfs:comment "Constraints ensuring safety requirements are met (Arkin 2008)"@en ;
    dcterms:references <https://doi.org/10.1109/MIS.2008.100> . # Arkin 2008

proeth:ConfidentialityConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Confidentiality Constraint"@en ;
    rdfs:comment "Boundaries on information disclosure and privacy (Dennis et al. 2016)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

# Temporal and Priority Type Constraints
proeth:TemporalConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Temporal Constraint"@en ;
    rdfs:comment "Time-based limitations and deadlines (Govindarajulu & Bringsjord 2017)"@en ;
    dcterms:references <https://doi.org/10.1609/aimag.v38i2.2743> . # Govindarajulu & Bringsjord 2017

proeth:PriorityConstraint a owl:Class ;
    rdfs:subClassOf proeth-core:Constraint ;
    rdfs:label "Priority Constraint"@en ;
    rdfs:comment "Constraints establishing precedence when multiple requirements conflict (Scheutz & Malle 2014)"@en ;
    dcterms:references <https://doi.org/10.1075/is.15.2.05sch> . # Scheutz & Malle 2014

# Constraint properties for relationships
proeth:hasConstraintType a owl:DatatypeProperty ;  # was owl:ObjectProperty, corrected: range is xsd:string
    rdfs:range xsd:string ;
    rdfs:label "has constraint type"@en ;
    rdfs:comment "Specifies the type of constraint (legal, regulatory, resource, etc.)"@en ;
    skos:changeNote "v2.x: Changed from owl:ObjectProperty to owl:DatatypeProperty. A property relating to a string literal must be a DatatypeProperty."@en .

proeth:constrainsAction a owl:ObjectProperty ;
    rdfs:domain proeth-core:Constraint ;
    rdfs:range proeth-core:Action ;
    rdfs:label "constrains action"@en ;
    rdfs:comment "Links constraint to actions it limits or prohibits"@en .

proeth:conflictsWithObligation a owl:ObjectProperty ;
    rdfs:domain proeth-core:Constraint ;
    rdfs:range proeth-core:Obligation ;
    rdfs:label "conflicts with obligation"@en ;
    rdfs:comment "Indicates when a constraint creates tension with an obligation"@en .

#################################################################
# Capability Categories from Chapter 2.2.8 Literature
# Based on Tolmeijer et al. (2021), Berreby et al. (2017), Anderson & Anderson (2018)
#################################################################

# Norm Management Capabilities
proeth:NormCompetence a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Norm Competence"@en ;
    rdfs:comment "Ability to store ethical rules, recognize when they apply, understand conflicts, and resolve contradictions (Tolmeijer et al. 2021)"@en ;
    dcterms:references <https://doi.org/10.1007/s11948-020-00230-4> . # Tolmeijer et al. 2021

proeth:ConflictResolution a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Conflict Resolution"@en ;
    rdfs:comment "Capability to manage and resolve conflicts between diverse and potentially conflicting normative requirements (Dennis et al. 2016)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-015-9308-2> . # Dennis et al. 2016

# Awareness and Perception Capabilities
proeth:SituationalAwareness a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Situational Awareness"@en ;
    rdfs:comment "Ability to perceive and interpret environmental factors affecting ethical evaluation (Almpani et al. 2023, Tolmeijer et al. 2021)"@en ;
    dcterms:references <https://doi.org/10.1007/s11948-020-00230-4> . # Tolmeijer et al. 2021

proeth:EthicalPerception a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Ethical Perception"@en ;
    rdfs:comment "Capability to recognize ethically salient features and dynamically assess environment (Anderson et al. 2006, Berreby et al. 2017)"@en ;
    dcterms:references <https://doi.org/10.1109/MIS.2006.98> . # Anderson et al. 2006

# Learning and Adaptation Capabilities
proeth:EthicalLearning a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Ethical Learning"@en ;
    rdfs:comment "Ability to adapt to new cases, changing standards, and novel situations while maintaining consistency (Anderson & Anderson 2018)"@en ;
    dcterms:references <https://doi.org/10.1007/s10676-017-9430-8> . # Anderson & Anderson 2018

proeth:PrincipleRefinement a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Principle Refinement"@en ;
    rdfs:comment "Capability to evolve principles as inconsistencies are resolved and new cases are added (GenEth system, Anderson & Anderson 2018)"@en ;
    dcterms:references <https://doi.org/10.1007/s10676-017-9430-8> . # Anderson & Anderson 2018

# Reasoning and Deliberation Capabilities
proeth:EthicalReasoning a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Ethical Reasoning"@en ;
    rdfs:comment "Capability to process ethical information, deliberate on choices, and exercise moral judgment (Wallach & Allen 2009, Belle 2023)"@en ;
    dcterms:references <https://doi.org/10.1093/acprof:oso/9780195374049.001.0001> . # Wallach & Allen 2009

proeth:CausalReasoning a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Causal Reasoning"@en ;
    rdfs:comment "Ability to trace complex causal chains and establish responsibility relationships (Sarmiento et al. 2023, Wright's NESS test)"@en ;
    dcterms:references <https://doi.org/10.1007/s10458-023-09609-6> . # Sarmiento et al. 2023

proeth:TemporalReasoning a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Temporal Reasoning"@en ;
    rdfs:comment "Capability to reason about temporal dynamics and event sequences in ethical evaluation (Govindarajulu & Bringsjord 2017)"@en ;
    dcterms:references <https://doi.org/10.1007/s11023-015-9367-9> . # Govindarajulu & Bringsjord 2017

# Communication and Explanation Capabilities
proeth:ExplanationGeneration a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Explanation Generation"@en ;
    rdfs:comment "Ability to provide clear explanations and justifications for ethical decisions (Langley 2019, Tolmeijer et al. 2021)"@en ;
    dcterms:references <https://doi.org/10.1007/s11948-020-00230-4> . # Tolmeijer et al. 2021

proeth:JustificationCapability a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Justification Capability"@en ;
    rdfs:comment "Capability to trace reasoning paths connecting decisions to authoritative sources (McLaren 2003, Anderson & Anderson 2018)"@en ;
    dcterms:references <https://doi.org/10.1023/B:AIRE.0000009444.71972.2e> . # McLaren 2003

proeth:ResponsibilityDocumentation a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Responsibility Documentation"@en ;
    rdfs:comment "Capability to maintain detailed logs of actions and reasoning for accountability (Arkin 2008, Kroll 2020)"@en ;
    dcterms:references <https://doi.org/10.1109/MIS.2008.100> . # Arkin 2008

# Domain-Specific Capabilities
proeth:DomainExpertise a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Domain Expertise"@en ;
    rdfs:comment "Professional domain-specific knowledge and competencies (Hallamaa & Kalliokoski 2022, Doernberg & Truog 2023)"@en ;
    dcterms:references <https://doi.org/10.1007/s00146-021-01230-z> . # Hallamaa & Kalliokoski 2022

proeth:ProfessionalCompetence a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Professional Competence"@en ;
    rdfs:comment "Technical competencies specific to professional roles and activities (Kong et al. 2020, Stenseke 2024)"@en ;
    dcterms:references <https://doi.org/10.1007/s10676-024-09775-5> . # Stenseke 2024

# Retrieval and Application Capabilities
proeth:PrecedentRetrieval a owl:Class ;
    rdfs:subClassOf proeth-core:Capability ;
    rdfs:label "Precedent Retrieval"@en ;
    rdfs:comment "Capability to identify relevant precedents and apply case-based reasoning (McLaren 2003, SIROCCO system)"@en ;
    dcterms:references <https://doi.org/10.1023/B:AIRE.0000009444.71972.2e> . # McLaren 2003

# Capability properties for relationships
proeth:hasCapabilityLevel a owl:DatatypeProperty ;  # was owl:ObjectProperty, corrected: range is xsd:string
    rdfs:range xsd:string ;
    rdfs:label "has capability level"@en ;
    rdfs:comment "Indicates the level or degree of a capability"@en ;
    skos:changeNote "v2.x: Changed from owl:ObjectProperty to owl:DatatypeProperty. A property relating to a string literal must be a DatatypeProperty."@en .

proeth:enablesAction a owl:ObjectProperty ;
    rdfs:domain proeth-core:Capability ;
    rdfs:range proeth-core:Action ;
    rdfs:label "enables action"@en ;
    rdfs:comment "Relates a capability to the actions it enables"@en .

proeth:requiresCapability a owl:ObjectProperty ;
    rdfs:domain proeth-core:Role ;
    rdfs:range proeth-core:Capability ;
    rdfs:label "requires capability"@en ;
    rdfs:comment "Specifies capabilities required for a professional role"@en .

#################################################################
#    Case Analysis Entities (Step 4 Enhanced Analysis)
#    For Questions, Conclusions, and Decision Points
#################################################################

# Ethical Question - Questions posed to the Board for ethical review
:EthicalQuestion rdf:type owl:Class ;
    rdf:type :EntityType ;
    owl:equivalentClass proeth-cases:EthicalQuestion ;
    owl:deprecated true ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant (information content)
    rdfs:label "Ethical Question"@en ;
    iao:0000115 "A question about ethical conduct posed for Board of Ethical Review consideration, representing a specific inquiry about professional ethics requiring formal determination."@en ;
    skos:definition "Questions submitted to ethics review boards articulate specific ethical uncertainties requiring authoritative interpretation. Per McLaren (2003), these questions provide the extensional grounding for principle application, with each Board determination adding to the precedential knowledge base."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> ; # McLaren 2003
    rdfs:comment "Extracted from case 'Questions' sections. Each question frames a specific ethical issue for Board determination. DEPRECATED: use proeth-cases:EthicalQuestion."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-cases:EthicalQuestion. Added owl:equivalentClass to bridge existing references. Case data uses the proeth-cases: version."@en .

# Board Conclusion - The Board's formal determination on an ethical question
:BoardConclusion rdf:type owl:Class ;
    rdf:type :EntityType ;
    owl:equivalentClass proeth-cases:EthicalConclusion ;
    owl:deprecated true ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant (information content)
    rdfs:label "Board Conclusion"@en ;
    iao:0000115 "The Board of Ethical Review's formal determination on an ethical question, representing authoritative professional judgment with precedential value."@en ;
    skos:definition "Board conclusions represent the culmination of ethical deliberation, providing precedential guidance for future cases. Per McLaren (2003), these determinations give concrete meaning to abstract principles through their application to specific factual contexts."@en ;
    dcterms:source <https://doi.org/10.1023/A:1024195425598> ; # McLaren 2003
    rdfs:comment "Extracted from case 'Conclusions' sections. Each conclusion answers a specific ethical question and establishes precedent. DEPRECATED: use proeth-cases:EthicalConclusion."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-cases:EthicalConclusion. Added owl:equivalentClass to bridge existing references."@en .

# Decision Point - A point in the case where an ethical choice must be made
:DecisionPoint rdf:type owl:Class ;
    rdf:type :EntityType ;
    owl:equivalentClass proeth-cases:DecisionPoint ;
    owl:deprecated true ;
    rdfs:subClassOf proeth-core:Event ;
    rdfs:label "Decision Point"@en ;
    iao:0000115 "A point in an ethics case where a professional actor must make a choice between ethically significant alternatives, representing a critical juncture in the case narrative."@en ;
    skos:definition "Decision points mark critical junctures in ethics cases where actors face choices between alternatives with ethical implications. Per Hobbs & Moore (2005) scenario-directed decision analysis, these points structure the ethical problem space and enable systematic analysis of options, constraints, and outcomes."@en ;
    dcterms:source <https://doi.org/10.1111/j.1539-6924.2005.00634.x> ; # Hobbs & Moore 2005
    rdfs:comment "Extracted during Step 4 analysis. Each decision point includes options, involved roles, applicable provisions, and the board's resolution. DEPRECATED: use proeth-cases:DecisionPoint."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-cases:DecisionPoint. Added owl:equivalentClass to bridge existing references. 845 case instances reference proeth-cases:DecisionPoint."@en .

# Decision Option - An alternative available at a decision point
:DecisionOption rdf:type owl:Class ;
    rdf:type :EntityType ;
    owl:equivalentClass proeth-cases:DecisionOption ;
    owl:deprecated true ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant (information content)
    rdfs:label "Decision Option"@en ;
    iao:0000115 "A possible course of action available at a decision point, representing one alternative the actor could choose."@en ;
    skos:definition "Decision options represent the discrete alternatives available to actors at decision points. Per scenario-directed analysis frameworks, clearly articulating options enables structured evaluation of consequences and ethical implications for each path."@en ;
    rdfs:comment "Each decision point has multiple options; one is typically marked as the board's chosen resolution. DEPRECATED: use proeth-cases:DecisionOption."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-cases:DecisionOption. Added owl:equivalentClass to bridge existing references."@en .

# Ethical Argument - A pro or con argument for a decision option
:EthicalArgument rdf:type owl:Class ;
    rdf:type :EntityType ;
    owl:equivalentClass proeth-cases:Argument ;
    owl:deprecated true ;
    rdfs:subClassOf bfo:BFO_0000031 ; # generically dependent continuant (information content)
    rdfs:label "Ethical Argument"@en ;
    iao:0000115 "An argument supporting or opposing a decision option, based on ethical principles, code provisions, and precedent cases."@en ;
    skos:definition "Ethical arguments represent the pro/con reasoning for decision options. Per the IAAI 'Pros and Cons in Ethical Decisions' paper, evaluative AI presents balanced arguments citing code provisions and precedents so practitioners can make informed decisions."@en ;
    rdfs:comment "Generated during Step 4 Part F. Each argument includes a claim, premises, provision citations, and strength assessment. DEPRECATED: use proeth-cases:Argument."@en ;
    skos:changeNote "v2.4.2: Deprecated in favor of proeth-cases:Argument. Added owl:equivalentClass to bridge existing references."@en .

# Properties for case analysis entities
:hasQuestion rdf:type owl:ObjectProperty ;
    rdfs:domain bfo:BFO_0000001 ; # entity (case)
    rdfs:range :EthicalQuestion ;
    rdfs:label "has question"@en ;
    rdfs:comment "Relates a case to the ethical questions it poses for Board review"@en .

:hasConclusion rdf:type owl:ObjectProperty ;
    rdfs:domain bfo:BFO_0000001 ; # entity (case)
    rdfs:range :BoardConclusion ;
    rdfs:label "has conclusion"@en ;
    rdfs:comment "Relates a case to the Board's conclusions"@en .

:hasDecisionPoint rdf:type owl:ObjectProperty ;
    rdfs:domain bfo:BFO_0000001 ; # entity (case)
    rdfs:range :DecisionPoint ;
    rdfs:label "has decision point"@en ;
    rdfs:comment "Relates a case to a decision point identified within it"@en .

:hasOption rdf:type owl:ObjectProperty ;
    rdfs:domain :DecisionPoint ;
    rdfs:range :DecisionOption ;
    rdfs:label "has option"@en ;
    rdfs:comment "Relates a decision point to its available options"@en .

:answersQuestion rdf:type owl:ObjectProperty ;
    rdfs:domain :BoardConclusion ;
    rdfs:range :EthicalQuestion ;
    rdfs:label "answers question"@en ;
    rdfs:comment "Relates a Board conclusion to the question it answers"@en .

:involvesRole rdf:type owl:ObjectProperty ;
    rdfs:domain :DecisionPoint ;
    rdfs:range proeth-core:Role ;
    rdfs:label "involves role"@en ;
    rdfs:comment "Relates a decision point to the professional roles involved in it"@en .

:appliesProvision rdf:type owl:ObjectProperty ;
    rdfs:domain :DecisionPoint ;
    rdfs:range :EthicalCode ;
    rdfs:label "applies provision"@en ;
    rdfs:comment "Relates a decision point to the ethical code provisions applicable to it"@en .

:isBoardChoice rdf:type owl:DatatypeProperty ;
    rdfs:domain :DecisionOption ;
    rdfs:range xsd:boolean ;
    rdfs:label "is board choice"@en ;
    rdfs:comment "Indicates whether this option was the Board's chosen resolution"@en .

:hasArgument rdf:type owl:ObjectProperty ;
    rdfs:domain :DecisionOption ;
    rdfs:range :EthicalArgument ;
    rdfs:label "has argument"@en ;
    rdfs:comment "Relates a decision option to an argument for or against it"@en .

:argumentFor rdf:type owl:ObjectProperty ;
    rdfs:domain :EthicalArgument ;
    rdfs:range :DecisionOption ;
    rdfs:label "argument for"@en ;
    rdfs:comment "Indicates this is a PRO argument supporting the decision option"@en ;
    skos:changeNote "v2.4.2: Removed rdfs:subPropertyOf :hasArgument. The parent property has domain DecisionOption and range EthicalArgument, but argumentFor has the inverse direction (EthicalArgument to DecisionOption). A subproperty cannot invert its parent's domain/range."@en .

:argumentAgainst rdf:type owl:ObjectProperty ;
    rdfs:domain :EthicalArgument ;
    rdfs:range :DecisionOption ;
    rdfs:label "argument against"@en ;
    rdfs:comment "Indicates this is a CON argument opposing the decision option"@en ;
    skos:changeNote "v2.4.2: Removed rdfs:subPropertyOf :hasArgument. Same domain/range inversion issue as argumentFor."@en .

:citesProvision rdf:type owl:ObjectProperty ;
    rdfs:domain :EthicalArgument ;
    rdfs:range :EthicalCode ;
    rdfs:label "cites provision"@en ;
    rdfs:comment "Relates an argument to the code provision it cites as support"@en .

:argumentType rdf:type owl:DatatypeProperty ;
    rdfs:domain :EthicalArgument ;
    rdfs:range xsd:string ;
    rdfs:label "argument type"@en ;
    rdfs:comment "The type of argument: 'pro' or 'con'"@en .

:argumentStrength rdf:type owl:DatatypeProperty ;
    rdfs:domain :EthicalArgument ;
    rdfs:range xsd:string ;
    rdfs:label "argument strength"@en ;
    rdfs:comment "The assessed strength of the argument: 'weak', 'moderate', or 'strong'"@en .

#################################################################
#    SPARQL Query Support
#################################################################

# This comment documents the SPARQL query to retrieve all GuidelineConceptTypes:
# SELECT ?type ?label ?comment WHERE {
#   ?type rdf:type :GuidelineConceptType .
#   ?type rdfs:label ?label .
#   OPTIONAL { ?type rdfs:comment ?comment }
# }
# This will return: Role, Principle, Obligation, State, Resource, Action, Event, Capability

#################################################################
# Occupational role archetypes (2026-05-29)
#################################################################
# The OCCUPATIONAL axis of the role hierarchy. It says what kind of agent the role is.
# This is distinct from the RELATIONAL axis above (ProviderClientRole, ProfessionalPeerRole,
# and the rest), which says what duty-relationship the role creates. Extracted role leaves get
# a primary occupational parent here. Where applicable they also get a cross-cutting relational
# parent. The heads are seeded from IfcRoleEnum (ISO 16739) via SKOS crosswalk to the held
# ifc-roles stub. They are NOT subclassed under IFC. IFC roles are enumeration values, not classes.
# Engineer specializations and the obligation-bearing heads go under ProfessionalRole.
# Non-obligation-bearing participant heads (Client, Owner, Public, and the rest) go under
# ParticipantRole. That way they do not inherit the ProfessionalRole hasObligation restriction.
# Spec: proethica/docs-internal/reextraction/role-archetype-spec.md.

# archetypeAxis tags a role archetype's axis ("occupational" = what kind of agent;
# "relational" = what duty-relationship). The extractor's occupational resolver loads the
# classes tagged "occupational" and matches a role label against their rdfs:label +
# skos:altLabel synonyms (longest match wins). The placement rules therefore live in the
# ontology, per domain, not in code: a new domain ships its own archetype ontology with its
# own altLabels and needs no resolver change.
:archetypeAxis rdf:type owl:AnnotationProperty ;
    rdfs:label "archetype axis"@en ;
    rdfs:comment "Role-archetype axis marker: 'occupational' or 'relational'. Drives data-driven occupational placement; see the occupational resolver."@en .

# Engineer specializations (under :EngineerRole, itself under :ProfessionalRole)
:CivilEngineerRole rdf:type owl:Class ; rdfs:subClassOf :EngineerRole ;
    rdfs:label "Civil Engineer Role"@en ; skos:exactMatch ifcrole:CivilEngineer ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Engineer specializing in infrastructure and the built environment."@en .
:StructuralEngineerRole rdf:type owl:Class ; rdfs:subClassOf :EngineerRole ;
    rdfs:label "Structural Engineer Role"@en ; skos:exactMatch ifcrole:StructuralEngineer ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Engineer specializing in load-bearing structure and structural integrity."@en .
:MechanicalEngineerRole rdf:type owl:Class ; rdfs:subClassOf :EngineerRole ;
    rdfs:label "Mechanical Engineer Role"@en ; skos:exactMatch ifcrole:MechanicalEngineer ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Engineer specializing in mechanical systems."@en .
:ElectricalEngineerRole rdf:type owl:Class ; rdfs:subClassOf :EngineerRole ;
    rdfs:label "Electrical Engineer Role"@en ; skos:exactMatch ifcrole:ElectricalEngineer ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Engineer specializing in electrical systems and power."@en .

# Obligation-bearing occupational heads (under :ProfessionalRole)
:ProjectManagerRole rdf:type owl:Class ; rdfs:subClassOf :ProfessionalRole ;
    rdfs:label "Project Manager Role"@en ; skos:exactMatch ifcrole:ProjectManager ;
    :archetypeAxis "occupational" ; skos:altLabel "project manager"@en, "construction manager"@en, "program manager"@en ;
    rdfs:comment "Party responsible for planning, coordinating, and delivering a project."@en .
:ArchitectRole rdf:type owl:Class ; rdfs:subClassOf :ProfessionalRole ;
    rdfs:label "Architect Role"@en ; skos:exactMatch ifcrole:Architect ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Professional responsible for building design and construction oversight."@en .
:ConsultantRole rdf:type owl:Class ; rdfs:subClassOf :ProfessionalRole ;
    rdfs:label "Consultant Role"@en ; skos:exactMatch ifcrole:Consultant ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Professional engaged for expert advice on a specific aspect of a project. Engineering consultants are classified under EngineerRole. This head covers non-engineering advisory roles."@en .
:RegulatoryAuthorityRole rdf:type owl:Class ; rdfs:subClassOf :ProfessionalRole ;
    rdfs:label "Regulatory Authority Role"@en ;
    :archetypeAxis "occupational" ; skos:altLabel "regulator"@en, "regulatory"@en, "authority"@en, "inspector"@en, "government"@en, "board of ethical"@en, "public official"@en, "public agency"@en ;
    rdfs:comment "Code-enforcement officials, inspectors, boards, and government agencies acting in an oversight capacity. No IFC equivalent (IFC has no regulator role)."@en .

# Non-obligation-bearing occupational heads (under :ParticipantRole, so no obligation restriction)
:ClientRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Client Role"@en ; skos:exactMatch ifcrole:Client ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Party that commissions the project work. This is the occupational archetype. The duty relationship is carried separately by :ProviderClientRole."@en .
:OwnerRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Owner Role"@en ; skos:exactMatch ifcrole:Owner ; skos:closeMatch ifcrole:BuildingOwner ;
    :archetypeAxis "occupational" ;
    rdfs:comment "Party that owns the asset, project, or building."@en .
:PublicRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Public Role"@en ;
    :archetypeAxis "occupational" ; skos:altLabel "public"@en, "community"@en, "citizen"@en, "resident"@en, "neighbor"@en, "society"@en, "affected party"@en ;
    rdfs:comment "The public, community members, and affected stakeholders. No IFC equivalent, since IFC has no public or society role. The professional duty side is :PublicResponsibilityRole."@en .
:ContractorRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Contractor Role"@en ; skos:exactMatch ifcrole:Contractor ; skos:closeMatch ifcrole:Subcontractor ;
    :archetypeAxis "occupational" ; skos:altLabel "contractor"@en, "subcontractor"@en ;
    rdfs:comment "Party contracted to carry out construction work."@en .
:SupplierRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Supplier Role"@en ; skos:exactMatch ifcrole:Supplier ; skos:closeMatch ifcrole:Manufacturer ;
    :archetypeAxis "occupational" ; skos:altLabel "supplier"@en, "manufacturer"@en, "vendor"@en, "reseller"@en ;
    rdfs:comment "Party that supplies materials, products, or equipment."@en .
:EmployerRole rdf:type owl:Class ; rdfs:subClassOf :ParticipantRole ;
    rdfs:label "Employer Role"@en ;
    :archetypeAxis "occupational" ;
    rdfs:comment "The employing organization as a participant. The duty relationship is carried separately by :EmployerRelationshipRole. No IFC equivalent."@en .

#################################################################
#    Deprecated legacy classes (audit 2026-06-01, F4)
#    Superseded by proeth-cases:* or by :Principle; retained with a
#    machine-readable owl:deprecated marker rather than deleted so any
#    historical reference still resolves. The extractor must not emit them.
#################################################################
:EthicalArgument  owl:deprecated true .   # superseded by proeth-cases:Argument
:BoardConclusion  owl:deprecated true .   # superseded by proeth-cases:EthicalConclusion
:DecisionOption   owl:deprecated true .   # superseded by proeth-cases:DecisionOption
:EthicalQuestion  owl:deprecated true .   # superseded by proeth-cases:EthicalQuestion
:EthicalPrinciple owl:deprecated true .   # legacy synonym for :Principle


#################################################################
# Controlled extraction datatype vocabulary (added 2026-06-04)
# Declares the stable per-component literal fields the extraction pipeline
# emits, so the 'grounded in a controlled ontology vocabulary' claim covers
# datatype predicates, not only typed individuals + object-property edges.
# No rdfs:domain (intended component noted per property) to avoid weaponising
# the residual cross-category field leak into a disjointness clash.
#################################################################


# --- Shared (all nine components) ---
proeth:conceptCategory a owl:DatatypeProperty ;
    rdfs:label "concept category"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Base nine-component category tag (Role/Principle/...); display grouping, not reasoner-visible typing."@en .

proeth:confidence a owl:DatatypeProperty ;
    rdfs:label "confidence"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Extraction confidence for the individual, 0..1 as a string."@en .

proeth:textReferences a owl:DatatypeProperty ;
    rdfs:label "text references"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Verbatim source spans grounding the individual."@en .


# --- Role ---
proeth:actor a owl:DatatypeProperty ;
    rdfs:label "actor"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Role: the actor/agent name the role-bearer is (also drives the Agent layer)."@en .

proeth:roleCategory a owl:DatatypeProperty ;
    rdfs:label "role category"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Role: coarse role category (e.g. public_responsibility)."@en .

proeth:roleClass a owl:DatatypeProperty ;
    rdfs:label "role class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Role: the LLM-suggested ontology role class label."@en .

proeth:caseInvolvement a owl:DatatypeProperty ;
    rdfs:label "case involvement"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Role: how the role-bearer is involved in this case."@en .


# --- Principle ---
proeth:interpretation a owl:DatatypeProperty ;
    rdfs:label "interpretation"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: how the principle is read in this case."@en .

proeth:concreteExpression a owl:DatatypeProperty ;
    rdfs:label "concrete expression"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: the case-specific concrete expression."@en .

proeth:appliedTo a owl:DatatypeProperty ;
    rdfs:label "applied to"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: what the principle is applied to."@en .

proeth:balancingWith a owl:DatatypeProperty ;
    rdfs:label "balancing with"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: the competing consideration it is balanced against."@en .

proeth:tensionResolution a owl:DatatypeProperty ;
    rdfs:label "tension resolution"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: how a tension involving it is resolved."@en .

proeth:principleClass a owl:DatatypeProperty ;
    rdfs:label "principle class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: the LLM-suggested ontology principle class label."@en .


# --- Obligation ---
proeth:obligationStatement a owl:DatatypeProperty ;
    rdfs:label "obligation statement"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation: the statement of the duty."@en .

proeth:complianceStatus a owl:DatatypeProperty ;
    rdfs:label "compliance status"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation: met / unmet / partial / unclear judgment."@en .

proeth:temporalScope a owl:DatatypeProperty ;
    rdfs:label "temporal scope"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation/Constraint: when the duty/limit applies."@en .

proeth:caseContext a owl:DatatypeProperty ;
    rdfs:label "case context"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation/Capability/Constraint: case-specific grounding context."@en .

proeth:obligationClass a owl:DatatypeProperty ;
    rdfs:label "obligation class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation: the LLM-suggested ontology obligation class label."@en .


# --- State ---
proeth:subject a owl:DatatypeProperty ;
    rdfs:label "subject"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: the entity the state holds of."@en .

proeth:affectedParties a owl:DatatypeProperty ;
    rdfs:label "affected parties"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: parties the state bears on (also resolved to proeth-core:affects edges)."@en .

proeth:activePeriod a owl:DatatypeProperty ;
    rdfs:label "active period"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: the period over which the state holds."@en .

proeth:triggeringEvent a owl:DatatypeProperty ;
    rdfs:label "triggering event"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: the event bringing the state into being."@en .

proeth:terminatedBy a owl:DatatypeProperty ;
    rdfs:label "terminated by"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: what removes the state."@en .

proeth:urgencyLevel a owl:DatatypeProperty ;
    rdfs:label "urgency level"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State/Event: urgency judgment."@en .

proeth:principleTransformation a owl:DatatypeProperty ;
    rdfs:label "principle transformation"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: state-edge annotation grounding an R->P->O derivation."@en .

proeth:stateClass a owl:DatatypeProperty ;
    rdfs:label "state class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on State: the LLM-suggested ontology state class label."@en .


# --- Resource ---
proeth:documentTitle a owl:DatatypeProperty ;
    rdfs:label "document title"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: the resource/document title."@en .

proeth:usedInContext a owl:DatatypeProperty ;
    rdfs:label "used in context"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: the context the resource is used in."@en .

proeth:usedBy a owl:DatatypeProperty ;
    rdfs:label "used by"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: who uses it (also resolved to proeth-core:availableTo edges)."@en .

proeth:createdBy a owl:DatatypeProperty ;
    rdfs:label "created by"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: who created it."@en .

proeth:version a owl:DatatypeProperty ;
    rdfs:label "version"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: resource version/edition."@en .

proeth:resourceClass a owl:DatatypeProperty ;
    rdfs:label "resource class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Resource: the LLM-suggested ontology resource class label."@en .


# --- Capability ---
proeth:capabilityStatement a owl:DatatypeProperty ;
    rdfs:label "capability statement"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Capability: the statement of the competence."@en .

proeth:demonstratedThrough a owl:DatatypeProperty ;
    rdfs:label "demonstrated through"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Capability: textual evidence the capability was exercised."@en .

proeth:proficiencyLevel a owl:DatatypeProperty ;
    rdfs:label "proficiency level"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Capability: proficiency rating (e.g. expert)."@en .

proeth:capabilityClass a owl:DatatypeProperty ;
    rdfs:label "capability class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Capability: the LLM-suggested ontology capability class label."@en .


# --- Constraint ---
proeth:constraintStatement a owl:DatatypeProperty ;
    rdfs:label "constraint statement"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Constraint: the statement of the limit."@en .

proeth:severity a owl:DatatypeProperty ;
    rdfs:label "severity"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Constraint/Event: severity judgment."@en .

proeth:source a owl:DatatypeProperty ;
    rdfs:label "source"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Constraint: the source of the constraint."@en .

proeth:constraintClass a owl:DatatypeProperty ;
    rdfs:label "constraint class"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Constraint: the LLM-suggested ontology constraint class label."@en .


# --- Action / Event (temporal) ---
proeth:hasAgent a owl:DatatypeProperty ;
    rdfs:label "has agent"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: the acting agent name."@en .

proeth:agentRelation a owl:DatatypeProperty ;
    rdfs:label "agent relation"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: the joining keyword (and / or / with / in_conjunction_with) for a composite multi-actor agent (rdf_converter.decompose_agents)."@en .

proeth:eventRoleContext a owl:DatatypeProperty ;
    rdfs:label "event role context"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: the per-event role context of the agent."@en .

proeth:intendedOutcome a owl:DatatypeProperty ;
    rdfs:label "intended outcome"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: the intended outcome."@en .

proeth:hasMentalState a owl:DatatypeProperty ;
    rdfs:label "has mental state"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: the agent's mental state."@en .

proeth:foreseenUnintendedEffects a owl:DatatypeProperty ;
    rdfs:label "foreseen unintended effects"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action: foreseen unintended effects."@en .

proeth:withinCompetence a owl:DatatypeProperty ;
    rdfs:label "within competence"@en ;
    rdfs:range xsd:boolean ;
    rdfs:comment "Intended on Action: whether the action was within the agent's competence."@en .

proeth:temporalExtent a owl:DatatypeProperty ;
    rdfs:label "temporal extent"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Action/Event: instant or interval."@en .

proeth:eventType a owl:DatatypeProperty ;
    rdfs:label "event type"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Event: Event-Calculus occurrence type."@en .

proeth:causesStateChange a owl:DatatypeProperty ;
    rdfs:label "causes state change"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Event: prose summary of the state change."@en .


# --- Object-property literal shadows (datatype siblings of object properties) ---
proeth:fulfillsObligationText a owl:DatatypeProperty ;
    rdfs:label "fulfills obligation text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the fulfillsObligation edge (Action)."@en .

proeth:violatesObligationText a owl:DatatypeProperty ;
    rdfs:label "violates obligation text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the violatesObligation edge (Action)."@en .

proeth:guidedByPrincipleText a owl:DatatypeProperty ;
    rdfs:label "guided by principle text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the guidedByPrinciple edge (Action)."@en .

proeth:requiresCapabilityText a owl:DatatypeProperty ;
    rdfs:label "requires capability text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the requiresCapability relation (Action)."@en .

proeth:raisesObligationText a owl:DatatypeProperty ;
    rdfs:label "raises obligation text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the raisesObligation edge (Action)."@en .

proeth:initiatesText a owl:DatatypeProperty ;
    rdfs:label "initiates text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the initiates fluent edge (Action/Event)."@en .

proeth:terminatesText a owl:DatatypeProperty ;
    rdfs:label "terminates text"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Literal shadow of the terminates fluent edge (Action/Event)."@en .

# Participant 'who' literal shadows. These are the intermediate# literal
# (proeth:invokedBy ...), DISTINCT from the core# object-property edge
# (proeth-core:invokedBy <Agent>) the participant applier materialises -- different
# IRIs, so no punning. rpo_edges / defeasibility_pipeline read these literals off the
# committed graph as string context, so they keep the bare name (NOT redirected to a
# Text sibling, which would blind those readers).
proeth:invokedBy a owl:DatatypeProperty ;
    rdfs:label "invoked by (literal)"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Principle: literal naming who invokes it; mirrored by the proeth-core:invokedBy edge."@en .

proeth:obligatedParty a owl:DatatypeProperty ;
    rdfs:label "obligated party (literal)"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Obligation: literal naming who bears it; mirrored by the proeth-core:obligatedParty edge."@en .

proeth:possessedBy a owl:DatatypeProperty ;
    rdfs:label "possessed by (literal)"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Capability: literal naming who possesses it; mirrored by the proeth-core:possessedBy edge."@en .

proeth:constrainedEntity a owl:DatatypeProperty ;
    rdfs:label "constrained entity (literal)"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Intended on Constraint: literal naming who/what is constrained; mirrored by the proeth-core:constrainedEntity edge."@en .


# --- Controlled professional attributes (Role attributes dict, Part B) ---
proeth:hasLicense a owl:DatatypeProperty ;
    rdfs:label "has license"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: professional license/licensure (maps license, licensure, licenseStatus)."@en .

proeth:hasSpecialty a owl:DatatypeProperty ;
    rdfs:label "has specialty"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: area of specialisation (maps specialty, specialization)."@en .

proeth:experienceLevel a owl:DatatypeProperty ;
    rdfs:label "experience level"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: professional experience (maps experience, yearsOfExperience)."@en .

proeth:hasEmployer a owl:DatatypeProperty ;
    rdfs:label "has employer"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: employer/affiliation (maps employer, employedBy)."@en .

proeth:hasJurisdiction a owl:DatatypeProperty ;
    rdfs:label "has jurisdiction"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: licensing/practice jurisdiction (maps jurisdiction)."@en .

proeth:registrationStatus a owl:DatatypeProperty ;
    rdfs:label "registration status"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: professional registration status (maps registration)."@en .

proeth:roleInOrganization a owl:DatatypeProperty ;
    rdfs:label "role in organization"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: position within the organisation (maps position, roleInOrganization)."@en .

proeth:technicalBackground a owl:DatatypeProperty ;
    rdfs:label "technical background"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: technical background (maps technicalBackground)."@en .

proeth:roleNature a owl:DatatypeProperty ;
    rdfs:label "role nature"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Controlled Role attribute: the kind/nature of the role-bearer, e.g. 'Affected public', 'Manufacturing corporation' (maps the recurring type, entityType attribute keys)."@en .

proeth:otherAttribute a owl:DatatypeProperty ;
    rdfs:label "other attribute"@en ;
    rdfs:range xsd:string ;
    rdfs:comment "Closed-vocabulary overflow for a genuinely case-specific role attribute not in the controlled set. Carries the original key and value as a 'key: value' literal, so the data is preserved while the datatype-predicate space stays finite and fully declared."@en .

