Cascade Protocol Core Vocabulary
type: Ontology
description: Core vocabulary for schema versioning, data provenance, identity management, and patient demographics across all Cascade Protocol applications
creator: Cascade Agentic Labs
created: 2025-10-31
modified: 2026-08-14
version info: 3.6
comment: This vocabulary defines cross-cutting concepts used by all Cascade Protocol health data applications: schema versioning, data provenance, patient demographics (PatientProfile), and supporting identity classes (Address, PharmacyInfo, AdvanceDirectives). Domain-specific vocabularies (e.g., pots:, ecg:, glucose:) import this core vocabulary.

Data Provenance
type: Class
comment: Classification of how health data was generated or collected
subclass of: Entity

Consumer-Generated
type: Class
subclass of: Data Provenance
comment: Data generated directly by the user through personal devices (non-clinical setting).
disjoint with: Clinical-Generated

Clinical-Generated
type: Class
subclass of: Data Provenance
comment: Data generated in a clinical setting under healthcare provider supervision.
disjoint with: Consumer-Generated

Device-Generated
type: Class
subclass of: Consumer-Generated
comment: Data generated by a consumer health device (Apple Watch, blood pressure cuff, etc.) without clinical supervision.

Self-Reported
type: Class
subclass of: Consumer-Generated
comment: Data manually entered by the patient (symptom logs, medication adherence, intake form fields).

Consumer Wellness
type: Class
subclass of: Consumer-Generated
comment: Aggregated wellness data from consumer platforms (Apple Health, Google Fit).

EHR-Verified
type: Class
subclass of: Clinical-Generated
comment: Data imported from a verified Electronic Health Record system (Epic MyChart, Cerner, etc.).

Scanned Document
type: Class
subclass of: Clinical-Generated
comment: Data extracted from a scanned or photographed clinical document.

AI-Extracted
type: Class
subclass of: Clinical-Generated
comment: Data extracted from clinical documents using AI/NLP processing.

Schema Version
type: DatatypeProperty
comment: Semantic version of the ontology schema used to serialize this data (format: major.minor.patch)
range: string

Data Provenance
type: ObjectProperty
comment: Classification of how this data was generated (consumer vs clinical)
range: Data Provenance

Creator WebID
type: ObjectProperty
comment: Solid WebID URI of the user who created this data
sub property of: wasAttributedTo
range: Resource

Data Source
type: Class
comment: Identity and reliability metadata for a data-producing device, app, or system. Examples: Apple Watch, MyChart EHR, manual user entry.
subclass of: Agent

Source Name
type: DatatypeProperty
comment: Human-readable name: 'Apple Watch Series 10', 'MyChart', 'Manual Entry'
domain: Data Source
range: string

Source Bundle Identifier
type: DatatypeProperty
comment: App bundle identifier (e.g., 'com.apple.health'). Maps to HKSource.bundleIdentifier on Apple platforms.
domain: Data Source
range: string

Source Reliability Tier
type: DatatypeProperty
comment: Reliability classification: 'clinical' (lab equipment, EHR), 'medical_device' (FDA-cleared BP cuff), 'consumer_device' (smartwatch, fitness tracker), 'self_reported' (manual entry). Tiers inform display and conflict resolution — they do not imply clinical validity.
domain: Data Source
range: string

Source Metric Coverage
type: ObjectProperty
comment: A wellness metric this source provides. Use multiple triples for multiple metrics (e.g., two triples linking to health:restingHeartRate and health:heartRateVariability). Preferred over comma-separated strings for proper RDF graph traversal.
domain: Data Source

Source Organization
type: DatatypeProperty
comment: Organization that provided this record (e.g., 'Kaiser Permanente', 'Mayo Clinic'). Populated from FHIR meta.source or contained Organization reference during clinical record import.
range: string

Source Device Name
type: DatatypeProperty
comment: Device or app that recorded this measurement (e.g., 'Apple Watch Series 9', 'Omron BP Monitor'). Populated from HealthKit HKSource contributing app/device name.
range: string

Sub-Concern
type: AnnotationProperty
comment: Classifies a vocabulary class by its functional role within a vocabulary. Values are vocabulary-specific strings (e.g., 'summary', 'intake', 'analytics', 'identity', 'app-config', 'structural', 'deprecated'). Used for documentation generation, migration planning, and vocabulary organization.
domain: Class
range: string

Added in Schema Version
type: AnnotationProperty
comment: Records which schema version introduced this data element. Used by serializers to annotate when a class or property was first emitted.
range: string

Cascade URI
type: DatatypeProperty
comment: Stable identifier URI for a Cascade data element. Used across vocabularies to mint persistent identifiers for supplements, medications, and other resources. CANONICAL FORM OF A MULTI-VALUED IDENTITY INPUT (v3.6, NORMATIVE). An implementation that derives a record's identifier from the record's own content hashes a set of named content fields. Since health v2.6 and clinical v1.14 made the code fields (icd10Code, snomedCode, testCode, labCategory) 0..* to match FHIR R4 CodeableConcept.coding, one of those fields can hold several values, and a hash taken over an unordered field is only stable if the field is first put into a canonical form. Without one, two exports of the SAME record that list the same codings in a different order mint two different identifiers and the record silently splits in two. The canonical form of a multi-valued identity input is: 1. Discard members that are null or empty after trimming; trim each surviving member. 2. Deduplicate the survivors. 3. Sort ascending by Unicode code point. (Code point, not locale collation: a locale-dependent order would make identity depend on the machine.) 4. Join with a single separator character that the implementation fixes and documents. U+002C COMMA is the RECOMMENDED separator and new implementations MUST use it. 5. A one-element sequence MUST canonicalize to exactly the bare scalar form. 6. A sequence with no surviving member is treated as an absent field, exactly as a null scalar is. THE THREE INVARIANTS, which are normative independently of the separator and are what the conformance vectors check: ORDER INDEPENDENCE Shuffling the members of a multi-valued identity input MUST NOT change the identifier. SCALAR AGREEMENT A field holding exactly one value MUST mint the same identifier whether it is spelled as a scalar or as a one-element sequence. This is what keeps every identifier written before the fields became 0..* exactly where it is. DUPLICATE INDEPENDENCE Repeating a member MUST NOT change the identifi…
range: anyURI
version info: Canonical form of multi-valued identity inputs stated in core v3.6

Notifications Enabled
type: DatatypeProperty
comment: Whether the user has enabled push notifications across Cascade apps.
range: boolean

Preferred Units
type: DatatypeProperty
comment: User's preferred unit system: 'metric' or 'imperial'.
range: string

Patient Profile
type: Class
comment: Health-specific patient demographics and identity extensions. Designed to complement a Solid-compatible foaf:Agent identity profile (linked via rdfs:seeAlso). Stored at /profile/health.ttl. Contains health-relevant demographic data that is always private.

Date of Birth
type: DatatypeProperty
comment: Patient date of birth for age calculation and screening eligibility. FHIR-aligned: fhir:Patient.birthDate.
domain: Patient Profile
range: date

Gender Identity
type: DatatypeProperty
comment: Patient-reported gender identity. Values: woman, man, non_binary, other, prefer_not_to_say. SNOMED CT mapped via US Core genderIdentity extension.
domain: Patient Profile
range: string

Biological Sex
type: DatatypeProperty
comment: Biological sex for clinical calculations and screening recommendations. Values: male, female, intersex.
domain: Patient Profile
range: string

Age Group
type: DatatypeProperty
comment: Computed demographic classification for screening recommendations. Values: pediatric (0-17), young_adult (18-39), adult (40-64), senior (65+). Computed from dateOfBirth at serialization time.
domain: Patient Profile
range: string

Emergency Contact Name
type: DatatypeProperty
comment: Full name of the patient's emergency contact person.
domain: Patient Profile
range: string

Emergency Contact Relationship
type: DatatypeProperty
comment: Relationship of emergency contact to the patient. Values: spouse, parent, child, sibling, partner, friend, caregiver, other.
domain: Patient Profile
range: string

Emergency Contact Phone
type: DatatypeProperty
comment: Phone number of the patient's emergency contact person.
domain: Patient Profile
range: string

Has Address
type: ObjectProperty
comment: Links to a structured postal address. Used by PatientProfile and PharmacyInfo.
range: Address

Marital Status
type: DatatypeProperty
comment: Patient's marital status. Values: single, married, domesticPartnership, divorced, separated, widowed, preferNotToSay. FHIR-mapped via HL7 v3 MaritalStatus value set (MaritalStatus.fromFHIR()).
domain: Patient Profile
range: string

Race/Ethnicity
type: DatatypeProperty
comment: Patient's self-reported race/ethnicity using OMB standard categories. Multi-value: each selected value becomes a separate RDF triple with the same predicate (e.g. cascade:raceEthnicity "asian", "white"). Values: americanIndianAlaskaNative, asian, blackAfricanAmerican, hispanicLatino, nativeHawaiianPacificIslander, white, other, preferNotToSay. Elevated PHI sensitivity. FHIR-mapped via US Core race/ethnicity OMB category codes.
domain: Patient Profile
range: string

Has Preferred Pharmacy
type: ObjectProperty
comment: Links to the patient's preferred pharmacy for prescriptions. Deprecated v2.2 — use cascade:preferredPharmacy (blank-node linking) instead.
deprecated: true
domain: Patient Profile
range: Pharmacy Info

Has Advance Directives
type: ObjectProperty
comment: Links to the patient's advance directive declarations. Elevated PHI sensitivity. Deprecated v2.2 — use cascade:advanceDirectives (blank-node linking) instead.
deprecated: true
domain: Patient Profile
range: Advance Directives

Computed Age
type: DatatypeProperty
comment: Patient age in years, computed from dateOfBirth at serialization time. App-layer convenience property.
domain: Patient Profile
range: integer

Profile ID
type: DatatypeProperty
comment: Unique identifier (UUID) for the patient profile instance. Used for traceability and deduplication.
domain: Patient Profile
range: string

Pharmacy Address
type: DatatypeProperty
comment: Pharmacy address as a single text string. Simplified alternative to using a nested cascade:Address blank node for PharmacyInfo.
domain: Pharmacy Info
range: string

Emergency Contact
type: Class
comment: A patient's emergency contact person. Used as a blank node within cascade:PatientProfile. Properties: cascade:contactName, cascade:contactRelationship, cascade:contactPhone.

Contact Name
type: DatatypeProperty
comment: Full name of a contact person. Used within cascade:EmergencyContact blank nodes.
domain: Emergency Contact
range: string

Contact Relationship
type: DatatypeProperty
comment: Relationship of the contact to the patient: spouse, parent, child, sibling, partner, friend, caregiver, other.
domain: Emergency Contact
range: string

Contact Phone
type: DatatypeProperty
comment: Phone number for a contact person. Used within cascade:EmergencyContact blank nodes and also for general contact use on PatientProfile.
range: string

Emergency Contact
type: ObjectProperty
comment: Links a PatientProfile to an EmergencyContact blank node.
domain: Patient Profile
range: Emergency Contact

Advance Directives
type: ObjectProperty
comment: Links a PatientProfile to an AdvanceDirectives blank node.
domain: Patient Profile
range: Advance Directives

Preferred Pharmacy
type: ObjectProperty
comment: Links a PatientProfile to a PharmacyInfo blank node.
domain: Patient Profile
range: Pharmacy Info

Address
type: ObjectProperty
comment: Links an entity to an Address blank node. Used by PatientProfileSerializer.
domain: Patient Profile
range: Address

Preferred Language
type: DatatypeProperty
comment: Patient's preferred language for medical communication. NOTE: In the two-document Solid WebID Profile model, this should be emitted as dct:language in /profile/card.ttl (IdentityProfileSerializer), NOT in /profile/health.ttl (PatientProfileSerializer). This property is defined for backward compatibility but SER1 will remove it from PatientProfileSerializer.
domain: Patient Profile
range: string

Address
type: Class
comment: Structured postal address reusing FHIR Address semantics. Used by PatientProfile and PharmacyInfo.

Street Address
type: DatatypeProperty
comment: Street line(s) of the address. Simplified alias of cascade:addressLine for flat serialization patterns.
domain: Address
range: string

City
type: DatatypeProperty
comment: City name. Simplified alias of cascade:addressCity for flat serialization patterns.
domain: Address
range: string

State
type: DatatypeProperty
comment: State or province. Simplified alias of cascade:addressState for flat serialization patterns.
domain: Address
range: string

Postal Code
type: DatatypeProperty
comment: ZIP or postal code. Simplified alias of cascade:addressPostalCode for flat serialization patterns.
domain: Address
range: string

Country
type: DatatypeProperty
comment: Country name or ISO 3166-1 code. Simplified alias of cascade:addressCountry for flat serialization patterns.
domain: Address
range: string

Address Use
type: DatatypeProperty
comment: Purpose of the address: home, work, temp, old. Aligns with FHIR Address.use.
domain: Address
range: string

Address Type
type: DatatypeProperty
comment: Type of address: postal, physical, both. Aligns with FHIR Address.type.
domain: Address
range: string

Address Text
type: DatatypeProperty
comment: Full address as a single text string. Aligns with FHIR Address.text.
domain: Address
range: string

Address Line
type: DatatypeProperty
comment: Street address line. Repeatable for multi-line addresses. Aligns with FHIR Address.line.
domain: Address
range: string

Address City
type: DatatypeProperty
comment: City name. FHIR-aligned equivalent of cascade:city. Aligns with FHIR Address.city.
domain: Address
range: string

Address District
type: DatatypeProperty
comment: District or county. Aligns with FHIR Address.district.
domain: Address
range: string

Address State
type: DatatypeProperty
comment: State or province. FHIR-aligned equivalent of cascade:state. Aligns with FHIR Address.state.
domain: Address
range: string

Address Postal Code
type: DatatypeProperty
comment: Postal or ZIP code. FHIR-aligned equivalent of cascade:postalCode. Aligns with FHIR Address.postalCode.
domain: Address
range: string

Address Country
type: DatatypeProperty
comment: Country name or ISO code. FHIR-aligned equivalent of cascade:country. Aligns with FHIR Address.country.
domain: Address
range: string

Pharmacy Info
type: Class
comment: Preferred pharmacy for prescriptions. Manual entry only (no Apple Health import source). Linked from PatientProfile via cascade:hasPreferredPharmacy.

Pharmacy Name
type: DatatypeProperty
comment: Name of the pharmacy.
domain: Pharmacy Info
range: string

Pharmacy Phone
type: DatatypeProperty
comment: Phone number of the pharmacy.
domain: Pharmacy Info
range: string

Advance Directives
type: Class
comment: Patient-reported advance directive declarations. Elevated PHI sensitivity. Linked from PatientProfile via cascade:hasAdvanceDirectives.

Has Living Will
type: DatatypeProperty
comment: Whether the patient has a living will on file.
domain: Advance Directives
range: boolean

Has Power of Attorney
type: DatatypeProperty
comment: Whether the patient has a healthcare power of attorney on file.
domain: Advance Directives
range: boolean

Has DNR
type: DatatypeProperty
comment: Whether the patient has a do-not-resuscitate order on file.
domain: Advance Directives
range: boolean

Advance Directive Notes
type: DatatypeProperty
comment: Optional free-text notes about advance directives.
domain: Advance Directives
range: string

Source System
type: DatatypeProperty
comment: INGESTION AXIS. The import batch a record entered the Pod through (e.g. 'Apple Health export', 'primary-care'). It records HOW AND WHEN data arrived, NOT where it came from, and it MUST NOT be used as a source identity: one batch commonly carries records from several organizations, and one organization commonly arrives in many batches. Use cascade:sourceIdentity for origin.
domain: Thing
range: string

Source Identity
type: DatatypeProperty
comment: ORIGIN AXIS. The canonical, transport-independent identity of the organization a record came from. Two records that a FHIR export and a C-CDA document of the SAME health system produced carry the same value here, which is what makes it usable as a reconciliation key where clinical:sourceEHR (a display label) and cascade:sourceSystem (an ingestion batch) are not. VALUE FORM. A scheme-prefixed token, so a consumer can always tell how much the producer actually knew: org:{slug} an organization was derivable. {slug} is the normalized form below. ns:{namespace} no organization was derivable, but the record's identifiers have an assigning authority: the FHIR server base URL, or the C-CDA <id> root OID. Records agree on origin only if they agree on the namespace. transport:{label} LAST RESORT. Nothing in the document named or located an organization, so the value restates cascade:sourceSystem, honestly prefixed. It is not an origin claim, and a consumer must treat two transport: values as 'origin unknown' rather than as evidence of a shared source. THE SLUG NORMALIZATION, which both transports must implement identically: 1. The input is either an organization NAME (a C-CDA custodian/author organization name, a FHIR Organization.name or an institution-looking performer display) or a HOST (the registrable domain of the source FHIR endpoint). 2. HOST: lowercase; drop a leading 'www.'; drop the public-suffix label(s), keeping the registrable name label ('fhir.meridianhealth.example' -> 'meridianhealth'). Then repeatedly strip any generic organization word that forms a whole prefix or suffix of that label ('meridianhealth' -> 'meridian'), never stripping to fewer than three characters. 3. NAME: lowercase; fold diacritics to ASCII; replace every run of non-alphanumeric characters with a single space; split on spaces. 4. Drop generic organization words, legal-form words and pure-number tokens from the token list. Generic means institution-or-specialty vocabulary that names no par…
domain: Thing
range: string
version info: Added in core v3.5

Reconciliation Status
type: ObjectProperty
comment: The outcome of reconciliation for this record. Value is one of the cascade:ReconciliationStatus named individuals: cascade:Canonical, cascade:Merged, cascade:ConflictResolved, cascade:UnresolvedConflict.
domain: Thing
range: Reconciliation Status

Reconciliation Status
type: Class
comment: Closed enumeration of possible reconciliation outcomes.

Canonical
type: NamedIndividual
type: Reconciliation Status
comment: Record is unique — no matching record found across other source systems.

Merged
type: NamedIndividual
type: Reconciliation Status
comment: Record was deduplicated from two or more identical or near-identical source records.

Conflict Resolved
type: NamedIndividual
type: Reconciliation Status
comment: Conflicting values across source records were resolved automatically using a trust-priority or merge strategy.

Unresolved Conflict
type: NamedIndividual
type: Reconciliation Status
comment: Conflicting values could not be automatically resolved (trust scores too similar). Requires manual clinical review.

Within-Source Duplicate
type: NamedIndividual
type: Reconciliation Status
comment: Record is a duplicate of another record within the same source system (e.g. same condition recorded across multiple clinical encounters). Suppressed from cross-system reconciliation output during Pass 1 deduplication.

Merged From
type: ObjectProperty
comment: Links a reconciled record to the source record URIs that were merged into it. Used together with prov:wasDerivedFrom for semantic interoperability.
domain: Thing
range: Thing
sub property of: wasDerivedFrom

Conflict Resolution Strategy
type: ObjectProperty
comment: The strategy used to resolve a conflict. Value is one of the cascade:ConflictResolutionStrategy named individuals: cascade:TrustPriority, cascade:MergeValues, cascade:FlagUnresolved.
domain: Thing
range: Conflict Resolution Strategy

Conflict Resolution Strategy
type: Class
comment: Closed enumeration of reconciliation resolution strategies.

Trust Priority
type: NamedIndividual
type: Conflict Resolution Strategy
comment: The record from the highest-trust source system is selected as canonical.

Merge Values
type: NamedIndividual
type: Conflict Resolution Strategy
comment: The canonical record is built by taking the winner's fields and filling any gaps from lower-trust sources.

Flag Unresolved
type: NamedIndividual
type: Conflict Resolution Strategy
comment: The conflict could not be automatically resolved. Record is tagged cascade:UnresolvedConflict for manual clinical review.

Conflict Field
type: ObjectProperty
comment: The predicate URI on which a conflict was detected during reconciliation (e.g. health:status, health:resultValue). Stored as a URI reference, not a prefixed name string.
domain: Thing
range: Resource

Conflict Description
type: DatatypeProperty
comment: Removed v2.7. Was informational prose describing conflicting values per source system. Replaced by cascade:conflictDetail structured blank node (v2.5), which uses rdfs:comment on the blank node for human readability.
deprecated: true
domain: Thing
range: string

Conflict Detail
type: ObjectProperty
comment: Links a reconciled record to a structured cascade:ConflictDetail blank node describing the per-system values that conflicted. The blank node carries an rdfs:comment with a human-readable summary.
domain: Thing
range: Conflict Detail

Conflict Detail
type: Class
comment: A structured representation of conflicting values across source systems for a single property. Used as a blank node linked from cascade:conflictDetail.

Conflict For
type: ObjectProperty
comment: The predicate URI on which the conflict was detected (e.g. <https://ns.cascadeprotocol.org/health/v1#status>). Links a cascade:ConflictDetail to the conflicting property.
domain: Conflict Detail
range: Resource

System Value
type: ObjectProperty
comment: Links a cascade:ConflictDetail to a blank node representing one source system's value for the conflicting property. Each participating source system has its own cascade:systemValue blank node.
domain: Conflict Detail

For System
type: DatatypeProperty
comment: The name of the source EHR system (e.g. 'primary-care', 'specialist') within a cascade:systemValue blank node.
domain: Conflict Detail
range: string

Data Absent Reason
type: DatatypeProperty
comment: Why this record's primary value is absent. Semantics are exactly FHIR R4 Observation.dataAbsentReason (https://hl7.org/fhir/R4/observation-definitions.html#Observation.dataAbsentReason): it explains the absence of the record's VALUE, and it is meaningful only when that value is in fact absent. A record that carries a value MUST NOT also carry this property. VALUE SET. One of the 15 codes of http://terminology.hl7.org/CodeSystem/data-absent-reason, as gathered by the value set http://hl7.org/fhir/ValueSet/data-absent-reason: unknown, asked-unknown, temp-unknown, not-asked, asked-declined, masked, not-applicable, unsupported, as-text, error, not-a-number, negative-infinity, positive-infinity, not-performed, not-permitted. MAPPING FROM HL7 v3 NullFlavor, which is what a C-CDA document writes (http://terminology.hl7.org/CodeSystem/v3-NullFlavor, OID 2.16.840.1.113883.5.1008). An importer reading a nullFlavor attribute MUST map it as follows and MUST NOT write the raw nullFlavor code into this property: UNK -> unknown a proper value applies but is not known ASKU -> asked-unknown the source was asked and did not know NASK -> not-asked the information was never sought NAV -> temp-unknown not available now, expected later NAVU -> unknown not available, with no expectation of later MSK -> masked withheld for security or privacy NA -> not-applicable known to have no proper value OTH -> unsupported the real value is outside the permitted value domain NI -> unknown no information, and no reason given NINF -> negative-infinity PINF -> positive-infinity Any other nullFlavor maps to "unknown", which is the code that asserts only that a value was expected and is missing. WHAT THIS IS NOT. It is not an interpretation, and it is not a substitute for one: an absent interpretation on a record whose value IS present is recorded on the interpretation property itself, whose value set accepts the same data-absent-reason codes. It is not a validation finding: absence of this property means …
domain: Thing
range: string
version info: Added in core v3.6

Layer Promotion Status Value
type: Class
comment: Closed enumeration of Layer 2 promotion states for converted FHIR records.

Layer Promotion Status
type: ObjectProperty
comment: Indicates whether a record has been fully mapped to Cascade Layer 2 vocabulary or is preserved as a Layer 1 FHIR passthrough pending future mapping.
range: Layer Promotion Status Value

Fully Mapped
type: NamedIndividual
type: Layer Promotion Status Value
comment: Record has been fully mapped to Cascade Layer 2 vocabulary.

Pending Layer 2 Promotion
type: NamedIndividual
type: Layer Promotion Status Value
comment: Record is preserved as Layer 1 FHIR passthrough. Full Layer 2 vocabulary mapping has not yet been defined. Original FHIR JSON is retained in cascade:fhirJson for round-trip export.

Original FHIR JSON
type: DatatypeProperty
comment: Preserves the complete original FHIR resource JSON for Layer 1 passthrough records. Always stored as plain xsd:string (FHIR JSON is always valid UTF-8). Used for lossless round-trip export. Self-contained — survives reconciliation without sidecar file dependencies.
range: string

FHIR Resource Type
type: DatatypeProperty
comment: FHIR R4 resourceType of the source record. Populated on Layer 1 passthrough records.
range: string

Source Record Date
type: DatatypeProperty
comment: Minimal date projection triple for Layer 1 passthrough records. Copied from effectiveDateTime, date, period.start, or created field if present.
range: dateTime

User Resolution
type: Class
comment: A patient's recorded decision for resolving a data conflict between two source records.
version info: Added in core v2.9

Pending Conflict
type: Class
comment: An unresolved conflict between two or more records from different sources, awaiting user resolution.
version info: Added in core v2.9

Conflict ID
type: DatatypeProperty
comment: A deterministic string identifier for a conflict, derived from the record type and identity fields. Stable across re-imports.
domain:
  union of: User Resolution
  union of: Pending Conflict
range: string

Resolution
type: DatatypeProperty
comment: The user's resolution decision. One of: kept-source-a, kept-source-b, kept-both, manual-edit.
domain: User Resolution
range: string

Kept Record
type: ObjectProperty
comment: The record that was kept as the canonical version after conflict resolution.
domain: User Resolution

Discarded Records
type: ObjectProperty
comment: Records that were discarded during conflict resolution.
domain: User Resolution

User Note
type: DatatypeProperty
comment: Optional free-text note from the patient about their resolution decision.
domain: User Resolution
range: string

Candidate Records
type: ObjectProperty
comment: The conflicting records in a PendingConflict, awaiting user resolution.
domain: Pending Conflict

Detected At
type: DatatypeProperty
comment: When the conflict was first detected during import.
domain: Pending Conflict
range: dateTime

Auto Resolved
type: DatatypeProperty
comment: True when a conflict was automatically resolved by applying a stored user resolution preference.
range: boolean

Document Type
type: DatatypeProperty
comment: The type of clinical document. Values: summarization, progress-note, discharge-summary, consultation-note, operative-note, history-physical.
range: string

Section Code
type: DatatypeProperty
comment: LOINC code of the originating C-CDA section for this record.
range: string

Source Record ID
type: DatatypeProperty
comment: The original source system record identifier (e.g., C-CDA <id> element value) preserved for provenance.
range: string

Health Record
type: Class
comment: Abstract base class for all patient health records. Both clinical:ClinicalRecord and clinical:SocialHistoryRecord subclass this. Enables cross-domain consent scoping and pod path policies.
version info: Added in core v3.0

AI Extraction Activity
type: Class
subclass of: Activity
comment: An LLM-powered extraction activity that produced one or more clinical records from unstructured narrative text. Link from record to activity via prov:wasGeneratedBy. The record itself carries cascade:dataProvenance cascade:AIExtracted (existing DataProvenance marker).
version info: Added in core v3.0

extractionConfidence
type: DatatypeProperty
domain: AI Extraction Activity
range: decimal
comment: Confidence score 0.0-1.0 from the extraction model.

extractionModel
type: DatatypeProperty
domain: AI Extraction Activity
range: string
comment: Model identifier used for extraction, e.g. 'qwen3.5-4b-q4_k_m'.

sourceNarrativeSection
type: DatatypeProperty
domain: AI Extraction Activity
range: string
comment: The C-CDA section name from which the narrative text was extracted (e.g. 'medications', 'problems').

requiresUserReview
type: DatatypeProperty
domain: AI Extraction Activity
range: boolean
comment: True if extraction confidence < 0.85 and record should enter the patient review queue.

requiresLLMExtraction
type: DatatypeProperty
range: boolean
comment: True if a C-CDA section contains only narrative text (no structured entries); signals the P5.3 LLM extraction pipeline.

AI Discarded Extraction
type: Class
comment: A low-confidence extraction (confidence < 0.50) retained in the patient's pod at pod/analysis/discarded-extractions.ttl. Not auto-imported. Patient can review and rescue into the review queue.
version info: Added in core v3.0

discardedEntityType
type: DatatypeProperty
domain: AI Discarded Extraction
range: string
comment: Type of entity that was discarded: medication | condition | lab | socialHistory | vital.

discardedFrom
type: DatatypeProperty
domain: AI Discarded Extraction
range: string
comment: C-CDA section name from which the discarded extraction originated.

discardedAt
type: DatatypeProperty
domain: AI Discarded Extraction
range: dateTime
comment: Timestamp when the extraction was discarded by the pipeline.

discardConfidence
type: DatatypeProperty
domain: AI Discarded Extraction
range: decimal
comment: Confidence score that caused the discard (< 0.50).

Social History Consent
type: NamedIndividual
comment: Consent scope for social history data. Patient can share clinical/ pod without exposing social-history/. Subject to 42 CFR Part 2 for substance use disorder records.

Advisory Application Activity
type: Class
subclass of: Activity
comment: An activity that applied a Cascade Advisory Patch to a pod. The activity joins to advisory provenance via prov:used <advisory-iri> and prov:used <matched-record-iri>, recording both the patch source and the record it was matched against. Use prov:wasGeneratedBy on records produced or modified by the patch.
version info: Added in core v3.1

AI Generation Activity
type: Class
subclass of: Activity
comment: An LLM-powered generation activity that produced narrative or summary content (e.g., checkup:VariantNarrative chunks). Sibling of cascade:AIExtractionActivity: extraction pulls structured records out of unstructured text, generation produces new prose. Records the model identifier, prompt version, temperature, and a cascade:trigger value indicating why the generation ran. Link from generated content to activity via prov:wasGeneratedBy.
version info: Added in core v3.1

Prompt Version
type: DatatypeProperty
domain: AI Generation Activity
range: string
comment: Identifier of the prompt template version used for this generation, e.g. 'variant-narrative-v2.1'. Pair with cascade:extractionModel for full reproducibility.

Generation Temperature
type: DatatypeProperty
domain: AI Generation Activity
range: decimal
comment: Sampling temperature used during generation (typically 0.0-1.0). Recorded for reproducibility and to distinguish deterministic from creative outputs.

Trigger
type: ObjectProperty
domain: AI Generation Activity
range: Generation Trigger
comment: The reason this generation activity ran. One of the cascade:GenerationTrigger named individuals: cascade:InitialGeneration, cascade:RegenerationAfterReclassification, cascade:AudienceRetargeting.

Generation Trigger
type: Class
comment: Closed enumeration of reasons an AIGenerationActivity may run.

Initial Generation
type: NamedIndividual
type: Generation Trigger
comment: First-time generation of a narrative or summary chunk. No prior version existed.

Regeneration After Reclassification
type: NamedIndividual
type: Generation Trigger
comment: Regeneration triggered because an upstream classification (e.g., variant pathogenicity, condition status) changed and the prior narrative is now stale.

Audience Retargeting
type: NamedIndividual
type: Generation Trigger
comment: Regeneration triggered to retarget existing content for a different audience (e.g., patient-facing vs. clinician-facing) without any underlying classification change.

Applied Triples Count
type: DatatypeProperty
domain: Advisory Application Activity
range: nonNegativeInteger
comment: Total number of triples the advisory's CAP body inserted into the pod for this single match. Lets a downstream auditor verify CAP profile constraint C5 (≤ 64 inserted triples per match) at activity-record-read time without re-parsing the patch body. Recorded by the cascade-cli applier (Phase 4 TASK-4.5) on every successful application.
version info: Added in core v3.2

AI-Asserted
type: Class
subclass of: Consumer-Generated
comment: Content surfaced by a general-purpose AI assistant in a patient-directed conversation (e.g. ChatGPT, Claude), NOT grounded in clinical sources. MUST be applied to evidence:Assertion instances imported from AI conversations so they can never be mistaken for clinically-extracted data (cascade:AIExtracted) or verified records (cascade:EHRVerified). Marks content that must be evidence-checked before any reliance.
version info: Added in core v3.3

Proxy Agent
type: Class
subclass of: Agent
comment: A person operating a patient's Pod on the patient's behalf (e.g. a parent for a minor child, a caregiver for a dependent adult). Distinct from the patient (cascade:PatientProfile). Records who is acting and under what authority and scope.
version info: Added in core v3.3

Acts For Patient
type: ObjectProperty
sub property of: actedOnBehalfOf
comment: The patient (WebID) on whose behalf the proxy acts.
domain: Proxy Agent
range: Resource
version info: Added in core v3.3

Proxy WebID
type: ObjectProperty
domain: Proxy Agent
range: Resource
version info: Added in core v3.3

Proxy Relationship
type: DatatypeProperty
comment: Relationship of the proxy to the patient. Reuses the cascade:contactRelationship value space: parent, guardian, caregiver, spouse, child, other.
domain: Proxy Agent
range: string
version info: Added in core v3.3

Proxy Scope
type: DatatypeProperty
comment: Authority scope, e.g. 'full', 'read-only', 'investigation-only'. Composable with cascade:consentScope (data-sensitivity), which it does not replace.
domain: Proxy Agent
range: string
version info: Added in core v3.3

Proxy Granted At
type: DatatypeProperty
domain: Proxy Agent
range: dateTime
version info: Added in core v3.3

Proxy Revoked At
type: DatatypeProperty
domain: Proxy Agent
range: dateTime
version info: Added in core v3.3

Export Manifest
type: Class
comment: Provenance and completeness metadata for a complete pod export: when it was generated, which schema versions it uses, how many records of each kind it contains, and which provenance layers are represented. Consumers should read this before processing individual resources.
subclass of: Dataset
subclass of: Entity
version info: Added in core v3.4; emitted since schema 1.3

Record Summary
type: Class
comment: Per-domain record counts for one partition of a pod export. Modelled on void:Dataset because it is a statistical description of a dataset subset; each count property is a subproperty of void:entities scoped to a particular void:class.
subclass of: Dataset
version info: Added in core v3.4; emitted since schema 1.3

Interaction Scenario
type: Class
comment: A clinically significant interaction that can only be detected by correlating resources of differing provenance, for example an EHR-prescribed drug against a self-reported supplement against a lab value. Cascade-specific: no ratified vocabulary models cross-provenance correlation as a first-class thing.
subclass of: Entity
version info: Added in core v3.4; emitted since schema 1.3

Patient Profile Version
type: DatatypeProperty
comment: Version of the patient profile structure used in this export, independent of cascade:schemaVersion.
domain: Export Manifest
range: string
version info: Added in core v3.4

Provenance Layers
type: ObjectProperty
comment: Ordered list of the cascade:DataProvenance values represented anywhere in this export. Lets a consumer tell, before reading any resource, whether the export contains device data, EHR data, self-reported data, or a mixture.
domain: Export Manifest
range: List
version info: Added in core v3.4

Clinical Summary
type: ObjectProperty
comment: Record counts for the clinical partition of this export.
domain: Export Manifest
range: Record Summary
version info: Added in core v3.4

Wellness Summary
type: ObjectProperty
comment: Record counts for the wellness partition of this export.
domain: Export Manifest
range: Record Summary
version info: Added in core v3.4

Device Sources
type: ObjectProperty
comment: Ordered list of the devices that contributed data to this export, each a prov:Agent.
domain: Export Manifest
range: List
version info: Added in core v3.4

Interaction Scenarios
type: ObjectProperty
comment: Ordered list of cascade:InteractionScenario entries flagged in this export.
domain: Export Manifest
range: List
version info: Added in core v3.4

Domain
type: DatatypeProperty
comment: Which partition of the export this summary describes, for example 'clinical' or 'wellness'.
domain: Record Summary
range: string
version info: Added in core v3.4

Notes
type: DatatypeProperty
comment: Free-text commentary on a summary or manifest section.
range: string
version info: Added in core v3.4

Condition Count
type: DatatypeProperty
comment: Number of condition records in this partition.
sub property of: entities
class: ConditionRecord
domain: Record Summary
range: integer
version info: Added in core v3.4

Medication Count
type: DatatypeProperty
comment: Number of medication records in this partition.
sub property of: entities
class: Medication
domain: Record Summary
range: integer
version info: Added in core v3.4

Allergy Count
type: DatatypeProperty
comment: Number of allergy records in this partition.
sub property of: entities
class: AllergyRecord
domain: Record Summary
range: integer
version info: Added in core v3.4

Lab Result Count
type: DatatypeProperty
comment: Number of laboratory result records in this partition.
sub property of: entities
class: LabResultRecord
domain: Record Summary
range: integer
version info: Added in core v3.4

Immunization Count
type: DatatypeProperty
comment: Number of immunization records in this partition.
sub property of: entities
class: ImmunizationRecord
domain: Record Summary
range: integer
version info: Added in core v3.4

Coverage Count
type: DatatypeProperty
comment: Number of insurance coverage records in this partition.
sub property of: entities
domain: Record Summary
range: integer
version info: Added in core v3.4

Supplement Count
type: DatatypeProperty
comment: Number of supplement records in this partition.
sub property of: entities
class: Supplement
domain: Record Summary
range: integer
version info: Added in core v3.4

Vital Sign Days
type: DatatypeProperty
comment: Number of distinct days covered by vital sign records in this partition. A day count, not a record count.
domain: Record Summary
range: integer
version info: Added in core v3.4

Heart Rate Days
type: DatatypeProperty
comment: Number of distinct days covered by heart rate history. A day count, not a record count.
domain: Record Summary
range: integer
version info: Added in core v3.4

Blood Pressure Days
type: DatatypeProperty
comment: Number of distinct days covered by blood pressure history. A day count, not a record count.
domain: Record Summary
range: integer
version info: Added in core v3.4

Activity Days
type: DatatypeProperty
comment: Number of distinct days covered by activity history. A day count, not a record count.
domain: Record Summary
range: integer
version info: Added in core v3.4

Sleep Days
type: DatatypeProperty
comment: Number of distinct nights covered by sleep history. A night count, not a record count.
domain: Record Summary
range: integer
version info: Added in core v3.4

Involved Resources
type: ObjectProperty
comment: Ordered list of the pod resources an agent must read together to detect this interaction.
domain: Interaction Scenario
range: List
version info: Added in core v3.4

Severity
type: DatatypeProperty
comment: Severity of the flagged interaction: low, moderate, high, or critical.
domain: Interaction Scenario
range: string
version info: Added in core v3.4

Requires Cross-Provenance
type: DatatypeProperty
comment: True when detecting this interaction requires correlating resources of different cascade:dataProvenance. The distinguishing property of this class: a single-source consumer cannot find it.
domain: Interaction Scenario
range: boolean
version info: Added in core v3.4

Source Type
type: DatatypeProperty
comment: Mechanism a reading arrived through, for example healthKit, bluetoothDevice, manualEntry. Describes the transport, NOT the trustworthiness of the data; that is cascade:dataProvenance.
range: string
version info: Added in core v3.4

Data Types
type: DatatypeProperty
comment: Comma-separated list of the data types a device contributed, for example 'heartRate, activity, sleep'.
range: string
version info: Added in core v3.4

Version
type: DatatypeProperty
comment: Version string of a software agent or generator recorded in provenance.
range: string
version info: Added in core v3.4

Date
type: DatatypeProperty
comment: Timestamp a reading or snapshot applies to. Note that health:date is a second, equivalent spelling emitted by a different serializer for the same purpose; readers of history containers must handle both.
range: dateTime
version info: Added in core v3.4

Sample Count
type: DatatypeProperty
comment: Number of underlying samples aggregated into a single reading. A daily resting heart rate of 68 derived from 142 samples is a stronger observation than one derived from 2, and consumers should be able to tell the difference.
range: integer
version info: Added in core v3.4

LOINC Code
type: ObjectProperty
comment: LOINC reference for an observation, as an IRI.
version info: Added in core v3.4