@prefix core: <http://proethica.org/ontology/core#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pcsh: <http://proethica.org/shapes/core#> .
@prefix proeth: <http://proethica.org/ontology/intermediate#> .
@prefix proeth-prov: <http://proethica.org/provenance#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

proeth:ConcernVersusFactDisclosureThresholdObligation a owl:Class ;
    rdfs:label "Concern Versus Fact Disclosure Threshold Obligation" ;
    proeth:confidence "0.82" ;
    proeth:derivedFromPrinciple "Fact-Based Disclosure Threshold Principle" ;
    proeth:enforcementLevel "conditional" ;
    proeth:monitoringCriteria "Documentation showing whether the engineer's finding was supported by completed technical analysis before disclosure was characterized as mandatory" ;
    proeth:nspeReference "II.3.b" ;
    proeth:obligationType "disclosure" ;
    proeth:stakeholdersAffected "Client",
        "General public",
        "Regulatory authorities" ;
    proeth:textReferences "Engineer L is concerned about increased risk over time, but has not developed their work to a point where they can assess risks of potential stormwater runoff resulting from the new development. Thus, Engineer L's 'concern' does not rise to the technical or moral level of 'fact,' and per Code section II.3.b, engineers may express publicly technical opinions that are founded upon knowledge of the facts.",
        "The BER's view is that, while it might be prudent for Engineer L to inform Client X of their concerns, such disclosure is not required under the Code." ;
    proeth:violationConsequences "Premature mandatory disclosure claims may misrepresent the state of technical knowledge; failure to recognize the threshold may lead to either over-disclosure of unverified concerns or under-disclosure of confirmed facts" ;
    proeth-prov:discoveredInCase 8 ;
    proeth-prov:discoveredInPass 2 ;
    proeth-prov:discoveredInSection "discussion" ;
    proeth-prov:firstDiscoveredAt "2026-06-04T10:06:46.728956+00:00"^^xsd:dateTime ;
    proeth-prov:firstDiscoveredInCase 8 ;
    proeth-prov:matchConfidence 0.72 ;
    proeth-prov:matchReasoning "This is a variant of the general Disclosure Obligation that specifically addresses the threshold condition distinguishing a preliminary concern from a technical fact for purposes of mandatory disclosure. The Fact-Based Disclosure Threshold Principle was identified in prior extraction, and this obligation operationalizes that principle. No existing class captures the concern-versus-fact distinction as a conditional trigger for disclosure duties." ;
    proeth-prov:matchedOntologyClass proeth:DisclosureObligation ;
    proeth-prov:matchedOntologyLabel "Disclosure Obligation" ;
    proeth-prov:matchesExisting true ;
    proeth-prov:sourceText "Engineer L is concerned about increased risk over time, but has not developed their work to a point where they can assess risks of potential stormwater runoff resulting from the new development. Thus, Engineer L's 'concern' does not rise to the technical or moral level of 'fact,' and per Code section II.3.b, engineers may express publicly technical opinions that are founded upon knowledge of the facts." ;
    rdfs:comment "Duty of an engineer to distinguish between a preliminary concern that has not yet been substantiated by technical analysis and a finding that constitutes a technical fact, and to recognize that mandatory disclosure obligations under Code section II.3.b are triggered only when the engineer's assessment rises to the level of fact rather than unverified concern, while acknowledging that prudent voluntary disclosure of concerns may nonetheless be appropriate." ;
    rdfs:subClassOf proeth:DisclosureObligation ;
    skos:definition "Duty of an engineer to distinguish between a preliminary concern that has not yet been substantiated by technical analysis and a finding that constitutes a technical fact, and to recognize that mandatory disclosure obligations under Code section II.3.b are triggered only when the engineer's assessment rises to the level of fact rather than unverified concern, while acknowledging that prudent voluntary disclosure of concerns may nonetheless be appropriate." ;
    skos:scopeNote "[DisclosureObligation] Requirement to inform stakeholders about conflicts, limitations, or risks (NSPE II.3.a)" ;
    prov:generatedAtTime "2026-06-04T10:06:46.728956+00:00"^^xsd:dateTime ;
    prov:wasAttributedTo "Case 8 Extraction",
        "claude-sonnet-4-6" .

pcsh:CaseAnnotationShape a sh:NodeShape ;
    rdfs:label "Shared per-case annotation schema (all nine components)"@en ;
    rdfs:comment "The cross-component annotation fields on committed case individuals: proeth:confidence (extraction confidence, decimal; all components except Action, whose Step-3 contract carries no confidence field), proeth:textReferences (verbatim supporting quotes, universal), proeth-prov sourceText (the source snippet, on the Step-1/2 provenance layers; Step-3 A/E individuals ground via textReferences only), and the involvement gloss (proeth:caseInvolvement on role individuals, proeth:caseContext on obligation, capability, and constraint individuals). Values are per-individual; the fields do not individuate any type."@en ;
    sh:property [ sh:description "Extraction confidence for this individual (0 to 1)." ;
            sh:name "confidence" ;
            sh:order 1 ;
            sh:path proeth:confidence ],
        [ sh:description "Verbatim case quotes supporting this individual." ;
            sh:name "text references" ;
            sh:order 2 ;
            sh:path proeth:textReferences ],
        [ sh:description "How this individual figures in the case narrative (role individuals; the same text is routed into rdfs:comment)." ;
            sh:name "case involvement" ;
            sh:order 3 ;
            sh:path proeth:caseInvolvement ],
        [ sh:description "Grounding context in this case (obligation, capability, and constraint individuals)." ;
            sh:name "case context" ;
            sh:order 4 ;
            sh:path proeth:caseContext ] ;
    sh:targetClass core:Action,
        core:Capability,
        core:Constraint,
        core:Event,
        core:Obligation,
        core:Principle,
        core:Resource,
        core:Role,
        core:State .

pcsh:ObligationDefinitionShape a sh:NodeShape ;
    rdfs:label "Obligation definition schema (type-level, descriptive, field contract)"@en ;
    rdfs:comment "What individuates an obligation TYPE: its controlled NSPE category, which drives the subClassOf core:Obligation typing. The concrete duty statement and the temporal-scope/compliance-status literals are per-individual, as are the derivedFromPrinciple and obligatedParty edges; all are declared on ObligationPropertyShape, mirroring the Role/Principle Definition/Property split. Descriptive only (no validation result); obligation_type is a routing input, not stored as a literal."@en ;
    sh:property [ sh:description "The controlled NSPE obligation category, which drives the subClassOf core:Obligation typing: disclosure, safety, competence, confidentiality, reporting, collegial, attribution, legal, ethical." ;
            sh:name "obligation type" ;
            sh:order 1 ;
            sh:path proeth:obligationType ] ;
    sh:targetClass core:Obligation .

pcsh:ObligationPropertyShape a sh:NodeShape ;
    rdfs:label "Obligation per-case schema (individual data, non-definitional)"@en ;
    rdfs:comment "What a given obligation INDIVIDUAL is described by in a specific case: the concrete duty it states, the principle it derives from and the party who bears it (both edges), and its temporal scope and compliance status. These do NOT individuate the obligation TYPE (that is ObligationDefinitionShape); their values are per-case, asserted on the individual. Descriptive only."@en ;
    sh:property [ sh:description "The concrete duty the obligation states (the operative 'shall' clause)." ;
            sh:name "obligation statement" ;
            sh:order 1 ;
            sh:path proeth:obligationStatement ],
        [ sh:description "The principle the obligation derives from, via the O->P derivedFromPrinciple edge (the P side of R->P->O). Range: Principle." ;
            sh:name "derived from principle" ;
            sh:order 2 ;
            sh:path core:derivedFromPrinciple ],
        [ sh:description "The agent who bears the obligation, via the obligatedParty edge. Range: Agent." ;
            sh:name "obligated party" ;
            sh:order 3 ;
            sh:path core:obligatedParty ],
        [ sh:description "When the obligation is in force (the period or condition of applicability)." ;
            sh:name "temporal scope" ;
            sh:order 4 ;
            sh:path proeth:temporalScope ],
        [ sh:description "Whether the obligation was met in the case: met, unmet, partial, or unclear." ;
            sh:name "compliance status" ;
            sh:order 5 ;
            sh:path proeth:complianceStatus ] ;
    sh:targetClass core:Obligation .

