@the-cascade-protocol/cli 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +7 -0
- package/.eslintrc.json +23 -0
- package/.prettierrc +7 -0
- package/DOCKER.md +36 -0
- package/Dockerfile +18 -0
- package/README.md +69 -0
- package/dist/commands/capabilities.d.ts +9 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +194 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/conformance.d.ts +15 -0
- package/dist/commands/conformance.d.ts.map +1 -0
- package/dist/commands/conformance.js +348 -0
- package/dist/commands/conformance.js.map +1 -0
- package/dist/commands/convert.d.ts +21 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +134 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/pod/export.d.ts +8 -0
- package/dist/commands/pod/export.d.ts.map +1 -0
- package/dist/commands/pod/export.js +72 -0
- package/dist/commands/pod/export.js.map +1 -0
- package/dist/commands/pod/helpers.d.ts +79 -0
- package/dist/commands/pod/helpers.d.ts.map +1 -0
- package/dist/commands/pod/helpers.js +369 -0
- package/dist/commands/pod/helpers.js.map +1 -0
- package/dist/commands/pod/index.d.ts +20 -0
- package/dist/commands/pod/index.d.ts.map +1 -0
- package/dist/commands/pod/index.js +29 -0
- package/dist/commands/pod/index.js.map +1 -0
- package/dist/commands/pod/info.d.ts +9 -0
- package/dist/commands/pod/info.d.ts.map +1 -0
- package/dist/commands/pod/info.js +196 -0
- package/dist/commands/pod/info.js.map +1 -0
- package/dist/commands/pod/init.d.ts +9 -0
- package/dist/commands/pod/init.d.ts.map +1 -0
- package/dist/commands/pod/init.js +251 -0
- package/dist/commands/pod/init.js.map +1 -0
- package/dist/commands/pod/query.d.ts +9 -0
- package/dist/commands/pod/query.d.ts.map +1 -0
- package/dist/commands/pod/query.js +169 -0
- package/dist/commands/pod/query.js.map +1 -0
- package/dist/commands/pod 2.js +1017 -0
- package/dist/commands/pod.d.ts +28 -0
- package/dist/commands/pod.d.ts 2.map +1 -0
- package/dist/commands/pod.d.ts.map +1 -0
- package/dist/commands/pod.js +1031 -0
- package/dist/commands/pod.js 2.map +1 -0
- package/dist/commands/pod.js.map +1 -0
- package/dist/commands/serve.d.ts +33 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +74 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/validate.d.ts +18 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +275 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/fhir-converter/cascade-to-fhir.d.ts +17 -0
- package/dist/lib/fhir-converter/cascade-to-fhir.d.ts.map +1 -0
- package/dist/lib/fhir-converter/cascade-to-fhir.js +358 -0
- package/dist/lib/fhir-converter/cascade-to-fhir.js.map +1 -0
- package/dist/lib/fhir-converter/converters-clinical.d.ts +29 -0
- package/dist/lib/fhir-converter/converters-clinical.d.ts.map +1 -0
- package/dist/lib/fhir-converter/converters-clinical.js +391 -0
- package/dist/lib/fhir-converter/converters-clinical.js.map +1 -0
- package/dist/lib/fhir-converter/converters-demographics.d.ts +20 -0
- package/dist/lib/fhir-converter/converters-demographics.d.ts.map +1 -0
- package/dist/lib/fhir-converter/converters-demographics.js +242 -0
- package/dist/lib/fhir-converter/converters-demographics.js.map +1 -0
- package/dist/lib/fhir-converter/fhir-to-cascade.d.ts +17 -0
- package/dist/lib/fhir-converter/fhir-to-cascade.d.ts.map +1 -0
- package/dist/lib/fhir-converter/fhir-to-cascade.js +63 -0
- package/dist/lib/fhir-converter/fhir-to-cascade.js.map +1 -0
- package/dist/lib/fhir-converter/index.d.ts +36 -0
- package/dist/lib/fhir-converter/index.d.ts.map +1 -0
- package/dist/lib/fhir-converter/index.js +187 -0
- package/dist/lib/fhir-converter/index.js.map +1 -0
- package/dist/lib/fhir-converter/types.d.ts +77 -0
- package/dist/lib/fhir-converter/types.d.ts.map +1 -0
- package/dist/lib/fhir-converter/types.js +236 -0
- package/dist/lib/fhir-converter/types.js.map +1 -0
- package/dist/lib/fhir-converter.d.ts +62 -0
- package/dist/lib/fhir-converter.d.ts.map +1 -0
- package/dist/lib/fhir-converter.js +1474 -0
- package/dist/lib/fhir-converter.js.map +1 -0
- package/dist/lib/mcp/audit.d.ts +24 -0
- package/dist/lib/mcp/audit.d.ts.map +1 -0
- package/dist/lib/mcp/audit.js +85 -0
- package/dist/lib/mcp/audit.js.map +1 -0
- package/dist/lib/mcp/server.d.ts +38 -0
- package/dist/lib/mcp/server.d.ts.map +1 -0
- package/dist/lib/mcp/server.js +172 -0
- package/dist/lib/mcp/server.js.map +1 -0
- package/dist/lib/mcp/tools.d.ts +47 -0
- package/dist/lib/mcp/tools.d.ts.map +1 -0
- package/dist/lib/mcp/tools.js +547 -0
- package/dist/lib/mcp/tools.js.map +1 -0
- package/dist/lib/output.d.ts +26 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +64 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/shacl-validator.d.ts +53 -0
- package/dist/lib/shacl-validator.d.ts.map +1 -0
- package/dist/lib/shacl-validator.js +245 -0
- package/dist/lib/shacl-validator.js.map +1 -0
- package/dist/lib/turtle-parser.d.ts +64 -0
- package/dist/lib/turtle-parser.d.ts.map +1 -0
- package/dist/lib/turtle-parser.js +236 -0
- package/dist/lib/turtle-parser.js.map +1 -0
- package/dist/shapes/checkup.shapes.ttl +1459 -0
- package/dist/shapes/clinical.shapes.ttl +1350 -0
- package/dist/shapes/clinical.ttl +1369 -0
- package/dist/shapes/core.shapes.ttl +450 -0
- package/dist/shapes/core.ttl +603 -0
- package/dist/shapes/coverage.shapes.ttl +214 -0
- package/dist/shapes/coverage.ttl +182 -0
- package/dist/shapes/health.shapes.ttl +697 -0
- package/dist/shapes/health.ttl +859 -0
- package/dist/shapes/pots.shapes.ttl +481 -0
- package/package.json +54 -0
- package/src/commands/capabilities.ts +235 -0
- package/src/commands/conformance.ts +447 -0
- package/src/commands/convert.ts +164 -0
- package/src/commands/pod/export.ts +85 -0
- package/src/commands/pod/helpers.ts +449 -0
- package/src/commands/pod/index.ts +32 -0
- package/src/commands/pod/info.ts +239 -0
- package/src/commands/pod/init.ts +273 -0
- package/src/commands/pod/query.ts +224 -0
- package/src/commands/serve.ts +92 -0
- package/src/commands/validate.ts +303 -0
- package/src/index.ts +58 -0
- package/src/lib/fhir-converter/cascade-to-fhir.ts +369 -0
- package/src/lib/fhir-converter/converters-clinical.ts +446 -0
- package/src/lib/fhir-converter/converters-demographics.ts +270 -0
- package/src/lib/fhir-converter/fhir-to-cascade.ts +82 -0
- package/src/lib/fhir-converter/index.ts +215 -0
- package/src/lib/fhir-converter/types.ts +318 -0
- package/src/lib/mcp/audit.ts +107 -0
- package/src/lib/mcp/server.ts +192 -0
- package/src/lib/mcp/tools.ts +668 -0
- package/src/lib/output.ts +76 -0
- package/src/lib/shacl-validator.ts +314 -0
- package/src/lib/turtle-parser.ts +277 -0
- package/src/shapes/checkup.shapes.ttl +1459 -0
- package/src/shapes/clinical.shapes.ttl +1350 -0
- package/src/shapes/clinical.ttl +1369 -0
- package/src/shapes/core.shapes.ttl +450 -0
- package/src/shapes/core.ttl +603 -0
- package/src/shapes/coverage.shapes.ttl +214 -0
- package/src/shapes/coverage.ttl +182 -0
- package/src/shapes/health.shapes.ttl +697 -0
- package/src/shapes/health.ttl +859 -0
- package/src/shapes/pots.shapes.ttl +481 -0
- package/test-fixtures/fhir-bundle-example.json +216 -0
- package/test-fixtures/fhir-medication-example.json +18 -0
- package/tests/cli.test.ts +126 -0
- package/tests/fhir-converter.test.ts +874 -0
- package/tests/mcp-server.test.ts +396 -0
- package/tests/pod.test.ts +400 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
@prefix cascade: <https://ns.cascadeprotocol.org/core/v1#> .
|
|
2
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
3
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
4
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
6
|
+
@prefix dct: <http://purl.org/dc/terms/> .
|
|
7
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
8
|
+
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
|
9
|
+
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
|
|
10
|
+
|
|
11
|
+
# ============================================================================
|
|
12
|
+
# Ontology Metadata
|
|
13
|
+
# ============================================================================
|
|
14
|
+
|
|
15
|
+
<https://ns.cascadeprotocol.org/core/v1#> a owl:Ontology ;
|
|
16
|
+
dct:title "Cascade Protocol Core Vocabulary"@en ;
|
|
17
|
+
dct:description "Core vocabulary for schema versioning, data provenance, identity management, and patient demographics across all Cascade Protocol applications"@en ;
|
|
18
|
+
dct:creator "Cascade Agentic Labs" ;
|
|
19
|
+
dct:created "2025-10-31"^^xsd:date ;
|
|
20
|
+
dct:modified "2026-02-22"^^xsd:date ;
|
|
21
|
+
owl:versionInfo "2.3" ;
|
|
22
|
+
rdfs: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."@en ;
|
|
23
|
+
rdfs:seeAlso <https://cascadeprotocol.org/docs/core/v1.0/> .
|
|
24
|
+
|
|
25
|
+
# ============================================================================
|
|
26
|
+
# Data Provenance Classes
|
|
27
|
+
# ============================================================================
|
|
28
|
+
|
|
29
|
+
cascade:DataProvenance a owl:Class ;
|
|
30
|
+
rdfs:label "Data Provenance"@en ;
|
|
31
|
+
rdfs:comment "Classification of how health data was generated or collected"@en ;
|
|
32
|
+
rdfs:subClassOf prov:Entity .
|
|
33
|
+
|
|
34
|
+
# --- Broad DataProvenance Categories (promoted from individuals to classes) ---
|
|
35
|
+
|
|
36
|
+
cascade:ConsumerGenerated a owl:Class ;
|
|
37
|
+
rdfs:subClassOf cascade:DataProvenance ;
|
|
38
|
+
rdfs:label "Consumer-Generated"@en ;
|
|
39
|
+
rdfs:comment "Data generated directly by the user through personal devices (non-clinical setting)."@en ;
|
|
40
|
+
owl:disjointWith cascade:ClinicalGenerated .
|
|
41
|
+
|
|
42
|
+
cascade:ClinicalGenerated a owl:Class ;
|
|
43
|
+
rdfs:subClassOf cascade:DataProvenance ;
|
|
44
|
+
rdfs:label "Clinical-Generated"@en ;
|
|
45
|
+
rdfs:comment "Data generated in a clinical setting under healthcare provider supervision."@en ;
|
|
46
|
+
owl:disjointWith cascade:ConsumerGenerated .
|
|
47
|
+
|
|
48
|
+
# --- ConsumerGenerated Subclasses ---
|
|
49
|
+
|
|
50
|
+
cascade:DeviceGenerated a owl:Class ;
|
|
51
|
+
rdfs:subClassOf cascade:ConsumerGenerated ;
|
|
52
|
+
rdfs:label "Device-Generated"@en ;
|
|
53
|
+
rdfs:comment "Data generated by a consumer health device (Apple Watch, blood pressure cuff, etc.) without clinical supervision."@en .
|
|
54
|
+
|
|
55
|
+
cascade:SelfReported a owl:Class ;
|
|
56
|
+
rdfs:subClassOf cascade:ConsumerGenerated ;
|
|
57
|
+
rdfs:label "Self-Reported"@en ;
|
|
58
|
+
rdfs:comment "Data manually entered by the patient (symptom logs, medication adherence, intake form fields)."@en .
|
|
59
|
+
|
|
60
|
+
cascade:ConsumerWellness a owl:Class ;
|
|
61
|
+
rdfs:subClassOf cascade:ConsumerGenerated ;
|
|
62
|
+
rdfs:label "Consumer Wellness"@en ;
|
|
63
|
+
rdfs:comment "Aggregated wellness data from consumer platforms (Apple Health, Google Fit)."@en .
|
|
64
|
+
|
|
65
|
+
# --- ClinicalGenerated Subclasses ---
|
|
66
|
+
|
|
67
|
+
cascade:EHRVerified a owl:Class ;
|
|
68
|
+
rdfs:subClassOf cascade:ClinicalGenerated ;
|
|
69
|
+
rdfs:label "EHR-Verified"@en ;
|
|
70
|
+
rdfs:comment "Data imported from a verified Electronic Health Record system (Epic MyChart, Cerner, etc.)."@en .
|
|
71
|
+
|
|
72
|
+
cascade:ScannedDocument a owl:Class ;
|
|
73
|
+
rdfs:subClassOf cascade:ClinicalGenerated ;
|
|
74
|
+
rdfs:label "Scanned Document"@en ;
|
|
75
|
+
rdfs:comment "Data extracted from a scanned or photographed clinical document."@en .
|
|
76
|
+
|
|
77
|
+
cascade:AIExtracted a owl:Class ;
|
|
78
|
+
rdfs:subClassOf cascade:ClinicalGenerated ;
|
|
79
|
+
rdfs:label "AI-Extracted"@en ;
|
|
80
|
+
rdfs:comment "Data extracted from clinical documents using AI/NLP processing."@en .
|
|
81
|
+
|
|
82
|
+
# ============================================================================
|
|
83
|
+
# Data Properties
|
|
84
|
+
# ============================================================================
|
|
85
|
+
|
|
86
|
+
# Schema Versioning
|
|
87
|
+
cascade:schemaVersion a owl:DatatypeProperty ;
|
|
88
|
+
rdfs:label "Schema Version"@en ;
|
|
89
|
+
rdfs:comment "Semantic version of the ontology schema used to serialize this data (format: major.minor.patch)"@en ;
|
|
90
|
+
rdfs:range xsd:string ;
|
|
91
|
+
rdfs:seeAlso <https://semver.org/> .
|
|
92
|
+
|
|
93
|
+
# Data Provenance
|
|
94
|
+
cascade:dataProvenance a owl:ObjectProperty ;
|
|
95
|
+
rdfs:label "Data Provenance"@en ;
|
|
96
|
+
rdfs:comment "Classification of how this data was generated (consumer vs clinical)"@en ;
|
|
97
|
+
rdfs:range cascade:DataProvenance .
|
|
98
|
+
|
|
99
|
+
# Identity
|
|
100
|
+
cascade:creatorWebID a owl:ObjectProperty ;
|
|
101
|
+
rdfs:label "Creator WebID"@en ;
|
|
102
|
+
rdfs:comment "Solid WebID URI of the user who created this data"@en ;
|
|
103
|
+
rdfs:subPropertyOf prov:wasAttributedTo ;
|
|
104
|
+
rdfs:range rdfs:Resource ;
|
|
105
|
+
rdfs:seeAlso <https://www.w3.org/TR/webid/> .
|
|
106
|
+
|
|
107
|
+
# ============================================================================
|
|
108
|
+
# Data Source Identity (v1.1)
|
|
109
|
+
# ============================================================================
|
|
110
|
+
|
|
111
|
+
# Design rationale: DataSource is placed in core: (not health:) because source
|
|
112
|
+
# identity is cross-cutting infrastructure — it applies equally to clinical data
|
|
113
|
+
# (which EHR system, which lab) and consumer wellness data (which device, which app).
|
|
114
|
+
# Subclasses prov:Agent per W3C PROV-O: sources are agents that produce entities.
|
|
115
|
+
#
|
|
116
|
+
# Relationship to FHIR Device: FHIR Device is for clinical device registries with
|
|
117
|
+
# regulatory identifiers. cascade:DataSource is broader — it covers apps, manual entry,
|
|
118
|
+
# EHR systems, and consumer devices. When FHIR interop is needed, a DataSource can
|
|
119
|
+
# reference a FHIR Device via rdfs:seeAlso.
|
|
120
|
+
#
|
|
121
|
+
# Reconciliation strategy (what happens when two sources disagree on the same metric)
|
|
122
|
+
# is deferred to post-MVP. For now, source attribution is displayed per-metric and
|
|
123
|
+
# users can view which source produced each reading.
|
|
124
|
+
#
|
|
125
|
+
# Future extension point: cascade:sourceTransitionEvent for tracking device migrations
|
|
126
|
+
# (e.g., Fitbit → Apple Watch) including date ranges and data continuity notes.
|
|
127
|
+
|
|
128
|
+
cascade:DataSource a owl:Class ;
|
|
129
|
+
rdfs:label "Data Source"@en ;
|
|
130
|
+
rdfs:comment "Identity and reliability metadata for a data-producing device, app, or system. Examples: Apple Watch, MyChart EHR, manual user entry."@en ;
|
|
131
|
+
rdfs:subClassOf prov:Agent .
|
|
132
|
+
|
|
133
|
+
cascade:sourceName a owl:DatatypeProperty ;
|
|
134
|
+
rdfs:label "Source Name"@en ;
|
|
135
|
+
rdfs:comment "Human-readable name: 'Apple Watch Series 10', 'MyChart', 'Manual Entry'"@en ;
|
|
136
|
+
rdfs:domain cascade:DataSource ;
|
|
137
|
+
rdfs:range xsd:string .
|
|
138
|
+
|
|
139
|
+
cascade:sourceBundleId a owl:DatatypeProperty ;
|
|
140
|
+
rdfs:label "Source Bundle Identifier"@en ;
|
|
141
|
+
rdfs:comment "App bundle identifier (e.g., 'com.apple.health'). Maps to HKSource.bundleIdentifier on Apple platforms."@en ;
|
|
142
|
+
rdfs:domain cascade:DataSource ;
|
|
143
|
+
rdfs:range xsd:string .
|
|
144
|
+
|
|
145
|
+
cascade:sourceReliabilityTier a owl:DatatypeProperty ;
|
|
146
|
+
rdfs:label "Source Reliability Tier"@en ;
|
|
147
|
+
rdfs: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."@en ;
|
|
148
|
+
rdfs:domain cascade:DataSource ;
|
|
149
|
+
rdfs:range xsd:string .
|
|
150
|
+
|
|
151
|
+
cascade:sourceMetricCoverage a owl:ObjectProperty ;
|
|
152
|
+
rdfs:label "Source Metric Coverage"@en ;
|
|
153
|
+
rdfs: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."@en ;
|
|
154
|
+
rdfs:domain cascade:DataSource .
|
|
155
|
+
|
|
156
|
+
# ============================================================================
|
|
157
|
+
# ============================================================================
|
|
158
|
+
# Provenance Detail Properties (v2.3)
|
|
159
|
+
# ============================================================================
|
|
160
|
+
|
|
161
|
+
cascade:sourceOrganization a owl:DatatypeProperty ;
|
|
162
|
+
rdfs:label "Source Organization"@en ;
|
|
163
|
+
rdfs: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."@en ;
|
|
164
|
+
rdfs:range xsd:string .
|
|
165
|
+
|
|
166
|
+
cascade:sourceDeviceName a owl:DatatypeProperty ;
|
|
167
|
+
rdfs:label "Source Device Name"@en ;
|
|
168
|
+
rdfs: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."@en ;
|
|
169
|
+
rdfs:range xsd:string .
|
|
170
|
+
|
|
171
|
+
# Vocabulary Organization (v1.3)
|
|
172
|
+
# ============================================================================
|
|
173
|
+
|
|
174
|
+
cascade:subConcern a owl:AnnotationProperty ;
|
|
175
|
+
rdfs:label "Sub-Concern"@en ;
|
|
176
|
+
rdfs: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."@en ;
|
|
177
|
+
rdfs:domain owl:Class ;
|
|
178
|
+
rdfs:range xsd:string .
|
|
179
|
+
|
|
180
|
+
# ============================================================================
|
|
181
|
+
# Schema Metadata Annotations (v2.1 — PF1-R)
|
|
182
|
+
# ============================================================================
|
|
183
|
+
|
|
184
|
+
cascade:addedInSchemaVersion a owl:AnnotationProperty ;
|
|
185
|
+
rdfs:label "Added in Schema Version"@en ;
|
|
186
|
+
rdfs:comment "Records which schema version introduced this data element. Used by serializers to annotate when a class or property was first emitted."@en ;
|
|
187
|
+
rdfs:range xsd:string .
|
|
188
|
+
|
|
189
|
+
cascade:cascadeUri a owl:DatatypeProperty ;
|
|
190
|
+
rdfs:label "Cascade URI"@en ;
|
|
191
|
+
rdfs:comment "Stable identifier URI for a Cascade data element. Used across vocabularies to mint persistent identifiers for supplements, medications, and other resources."@en ;
|
|
192
|
+
rdfs:range xsd:anyURI .
|
|
193
|
+
|
|
194
|
+
# ============================================================================
|
|
195
|
+
# Shared Preference Properties (v1.3)
|
|
196
|
+
# ============================================================================
|
|
197
|
+
# Cross-app user preferences. These properties are used in /settings/shared/
|
|
198
|
+
# preferences.ttl for preferences that apply across all Cascade apps.
|
|
199
|
+
# App-specific settings use their own namespace (e.g., checkup:, pots:).
|
|
200
|
+
|
|
201
|
+
cascade:notificationsEnabled a owl:DatatypeProperty ;
|
|
202
|
+
rdfs:label "Notifications Enabled"@en ;
|
|
203
|
+
rdfs:comment "Whether the user has enabled push notifications across Cascade apps."@en ;
|
|
204
|
+
rdfs:range xsd:boolean .
|
|
205
|
+
|
|
206
|
+
cascade:preferredUnits a owl:DatatypeProperty ;
|
|
207
|
+
rdfs:label "Preferred Units"@en ;
|
|
208
|
+
rdfs:comment "User's preferred unit system: 'metric' or 'imperial'."@en ;
|
|
209
|
+
rdfs:range xsd:string .
|
|
210
|
+
|
|
211
|
+
# ============================================================================
|
|
212
|
+
# Patient Profile (v2.0)
|
|
213
|
+
# ============================================================================
|
|
214
|
+
# Health-specific patient demographics, designed to complement a Solid-compatible
|
|
215
|
+
# foaf:Agent identity profile. The general identity profile (/profile/card.ttl)
|
|
216
|
+
# uses foaf:/vcard:/dct: vocabularies. This health profile (/profile/health.ttl)
|
|
217
|
+
# uses cascade: for health-relevant demographics that are always private.
|
|
218
|
+
#
|
|
219
|
+
# Two-document profile model (Solid WebID Profile pattern):
|
|
220
|
+
# /profile/card.ttl -- foaf:Agent with foaf:givenName, foaf:familyName,
|
|
221
|
+
# vcard:hasEmail, vcard:hasTelephone, dct:language
|
|
222
|
+
# (linked via rdfs:seeAlso to health profile)
|
|
223
|
+
# /profile/health.ttl -- cascade:PatientProfile with health-specific data
|
|
224
|
+
#
|
|
225
|
+
# Design rationale: Separate documents enable different access control policies.
|
|
226
|
+
# The general profile may be shared; the health profile is always private.
|
|
227
|
+
# See Schema Refactoring Plan WS6 for full architectural discussion.
|
|
228
|
+
|
|
229
|
+
cascade:PatientProfile a owl:Class ;
|
|
230
|
+
rdfs:label "Patient Profile"@en ;
|
|
231
|
+
rdfs: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."@en .
|
|
232
|
+
|
|
233
|
+
# --- PatientProfile Properties ---
|
|
234
|
+
|
|
235
|
+
cascade:dateOfBirth a owl:DatatypeProperty ;
|
|
236
|
+
rdfs:label "Date of Birth"@en ;
|
|
237
|
+
rdfs:comment "Patient date of birth for age calculation and screening eligibility. FHIR-aligned: fhir:Patient.birthDate."@en ;
|
|
238
|
+
rdfs:domain cascade:PatientProfile ;
|
|
239
|
+
rdfs:range xsd:date .
|
|
240
|
+
|
|
241
|
+
cascade:genderIdentity a owl:DatatypeProperty ;
|
|
242
|
+
rdfs:label "Gender Identity"@en ;
|
|
243
|
+
rdfs:comment "Patient-reported gender identity. Values: woman, man, non_binary, other, prefer_not_to_say. SNOMED CT mapped via US Core genderIdentity extension."@en ;
|
|
244
|
+
rdfs:domain cascade:PatientProfile ;
|
|
245
|
+
rdfs:range xsd:string .
|
|
246
|
+
|
|
247
|
+
cascade:biologicalSex a owl:DatatypeProperty ;
|
|
248
|
+
rdfs:label "Biological Sex"@en ;
|
|
249
|
+
rdfs:comment "Biological sex for clinical calculations and screening recommendations. Values: male, female, intersex."@en ;
|
|
250
|
+
rdfs:domain cascade:PatientProfile ;
|
|
251
|
+
rdfs:range xsd:string .
|
|
252
|
+
|
|
253
|
+
cascade:ageGroup a owl:DatatypeProperty ;
|
|
254
|
+
rdfs:label "Age Group"@en ;
|
|
255
|
+
rdfs: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."@en ;
|
|
256
|
+
rdfs:domain cascade:PatientProfile ;
|
|
257
|
+
rdfs:range xsd:string .
|
|
258
|
+
|
|
259
|
+
cascade:emergencyContactName a owl:DatatypeProperty ;
|
|
260
|
+
rdfs:label "Emergency Contact Name"@en ;
|
|
261
|
+
rdfs:comment "Full name of the patient's emergency contact person."@en ;
|
|
262
|
+
rdfs:domain cascade:PatientProfile ;
|
|
263
|
+
rdfs:range xsd:string .
|
|
264
|
+
|
|
265
|
+
cascade:emergencyContactRelationship a owl:DatatypeProperty ;
|
|
266
|
+
rdfs:label "Emergency Contact Relationship"@en ;
|
|
267
|
+
rdfs:comment "Relationship of emergency contact to the patient. Values: spouse, parent, child, sibling, partner, friend, caregiver, other."@en ;
|
|
268
|
+
rdfs:domain cascade:PatientProfile ;
|
|
269
|
+
rdfs:range xsd:string .
|
|
270
|
+
|
|
271
|
+
cascade:emergencyContactPhone a owl:DatatypeProperty ;
|
|
272
|
+
rdfs:label "Emergency Contact Phone"@en ;
|
|
273
|
+
rdfs:comment "Phone number of the patient's emergency contact person."@en ;
|
|
274
|
+
rdfs:domain cascade:PatientProfile ;
|
|
275
|
+
rdfs:range xsd:string .
|
|
276
|
+
|
|
277
|
+
cascade:hasAddress a owl:ObjectProperty ;
|
|
278
|
+
rdfs:label "Has Address"@en ;
|
|
279
|
+
rdfs:comment "Links to a structured postal address. Used by PatientProfile and PharmacyInfo."@en ;
|
|
280
|
+
rdfs:range cascade:Address .
|
|
281
|
+
|
|
282
|
+
cascade:maritalStatus a owl:DatatypeProperty ;
|
|
283
|
+
rdfs:label "Marital Status"@en ;
|
|
284
|
+
rdfs:comment "Patient's marital status. Values: single, married, domesticPartnership, divorced, separated, widowed, preferNotToSay. FHIR-mapped via HL7 v3 MaritalStatus value set (MaritalStatus.fromFHIR())."@en ;
|
|
285
|
+
rdfs:domain cascade:PatientProfile ;
|
|
286
|
+
rdfs:range xsd:string .
|
|
287
|
+
|
|
288
|
+
cascade:raceEthnicity a owl:DatatypeProperty ;
|
|
289
|
+
rdfs:label "Race/Ethnicity"@en ;
|
|
290
|
+
rdfs: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."@en ;
|
|
291
|
+
rdfs:domain cascade:PatientProfile ;
|
|
292
|
+
rdfs:range xsd:string .
|
|
293
|
+
|
|
294
|
+
cascade:hasPreferredPharmacy a owl:ObjectProperty ;
|
|
295
|
+
rdfs:label "Has Preferred Pharmacy"@en ;
|
|
296
|
+
rdfs:comment "Links to the patient's preferred pharmacy for prescriptions. Deprecated v2.2 — use cascade:preferredPharmacy (blank-node linking) instead."@en ;
|
|
297
|
+
owl:deprecated true ;
|
|
298
|
+
rdfs:domain cascade:PatientProfile ;
|
|
299
|
+
rdfs:range cascade:PharmacyInfo .
|
|
300
|
+
|
|
301
|
+
cascade:hasAdvanceDirectives a owl:ObjectProperty ;
|
|
302
|
+
rdfs:label "Has Advance Directives"@en ;
|
|
303
|
+
rdfs:comment "Links to the patient's advance directive declarations. Elevated PHI sensitivity. Deprecated v2.2 — use cascade:advanceDirectives (blank-node linking) instead."@en ;
|
|
304
|
+
owl:deprecated true ;
|
|
305
|
+
rdfs:domain cascade:PatientProfile ;
|
|
306
|
+
rdfs:range cascade:AdvanceDirectives .
|
|
307
|
+
|
|
308
|
+
# PatientProfile additional properties (v2.2, Phase 3.5 ONT2)
|
|
309
|
+
|
|
310
|
+
cascade:computedAge a owl:DatatypeProperty ;
|
|
311
|
+
rdfs:label "Computed Age"@en ;
|
|
312
|
+
rdfs:comment "Patient age in years, computed from dateOfBirth at serialization time. App-layer convenience property."@en ;
|
|
313
|
+
rdfs:domain cascade:PatientProfile ;
|
|
314
|
+
rdfs:range xsd:integer .
|
|
315
|
+
|
|
316
|
+
cascade:profileId a owl:DatatypeProperty ;
|
|
317
|
+
rdfs:label "Profile ID"@en ;
|
|
318
|
+
rdfs:comment "Unique identifier (UUID) for the patient profile instance. Used for traceability and deduplication."@en ;
|
|
319
|
+
rdfs:domain cascade:PatientProfile ;
|
|
320
|
+
rdfs:range xsd:string .
|
|
321
|
+
|
|
322
|
+
cascade:pharmacyAddress a owl:DatatypeProperty ;
|
|
323
|
+
rdfs:label "Pharmacy Address"@en ;
|
|
324
|
+
rdfs:comment "Pharmacy address as a single text string. Simplified alternative to using a nested cascade:Address blank node for PharmacyInfo."@en ;
|
|
325
|
+
rdfs:domain cascade:PharmacyInfo ;
|
|
326
|
+
rdfs:range xsd:string .
|
|
327
|
+
|
|
328
|
+
cascade:EmergencyContact a owl:Class ;
|
|
329
|
+
rdfs:label "Emergency Contact"@en ;
|
|
330
|
+
rdfs:comment "A patient's emergency contact person. Used as a blank node within cascade:PatientProfile. Properties: cascade:contactName, cascade:contactRelationship, cascade:contactPhone."@en .
|
|
331
|
+
|
|
332
|
+
cascade:contactName a owl:DatatypeProperty ;
|
|
333
|
+
rdfs:label "Contact Name"@en ;
|
|
334
|
+
rdfs:comment "Full name of a contact person. Used within cascade:EmergencyContact blank nodes."@en ;
|
|
335
|
+
rdfs:domain cascade:EmergencyContact ;
|
|
336
|
+
rdfs:range xsd:string .
|
|
337
|
+
|
|
338
|
+
cascade:contactRelationship a owl:DatatypeProperty ;
|
|
339
|
+
rdfs:label "Contact Relationship"@en ;
|
|
340
|
+
rdfs:comment "Relationship of the contact to the patient: spouse, parent, child, sibling, partner, friend, caregiver, other."@en ;
|
|
341
|
+
rdfs:domain cascade:EmergencyContact ;
|
|
342
|
+
rdfs:range xsd:string .
|
|
343
|
+
|
|
344
|
+
cascade:contactPhone a owl:DatatypeProperty ;
|
|
345
|
+
rdfs:label "Contact Phone"@en ;
|
|
346
|
+
rdfs:comment "Phone number for a contact person. Used within cascade:EmergencyContact blank nodes and also for general contact use on PatientProfile."@en ;
|
|
347
|
+
rdfs:range xsd:string .
|
|
348
|
+
|
|
349
|
+
cascade:emergencyContact a owl:ObjectProperty ;
|
|
350
|
+
rdfs:label "Emergency Contact"@en ;
|
|
351
|
+
rdfs:comment "Links a PatientProfile to an EmergencyContact blank node."@en ;
|
|
352
|
+
rdfs:domain cascade:PatientProfile ;
|
|
353
|
+
rdfs:range cascade:EmergencyContact .
|
|
354
|
+
|
|
355
|
+
cascade:advanceDirectives a owl:ObjectProperty ;
|
|
356
|
+
rdfs:label "Advance Directives"@en ;
|
|
357
|
+
rdfs:comment "Links a PatientProfile to an AdvanceDirectives blank node."@en ;
|
|
358
|
+
rdfs:domain cascade:PatientProfile ;
|
|
359
|
+
rdfs:range cascade:AdvanceDirectives .
|
|
360
|
+
|
|
361
|
+
cascade:preferredPharmacy a owl:ObjectProperty ;
|
|
362
|
+
rdfs:label "Preferred Pharmacy"@en ;
|
|
363
|
+
rdfs:comment "Links a PatientProfile to a PharmacyInfo blank node."@en ;
|
|
364
|
+
rdfs:domain cascade:PatientProfile ;
|
|
365
|
+
rdfs:range cascade:PharmacyInfo .
|
|
366
|
+
|
|
367
|
+
cascade:address a owl:ObjectProperty ;
|
|
368
|
+
rdfs:label "Address"@en ;
|
|
369
|
+
rdfs:comment "Links an entity to an Address blank node. Used by PatientProfileSerializer."@en ;
|
|
370
|
+
rdfs:domain cascade:PatientProfile ;
|
|
371
|
+
rdfs:range cascade:Address .
|
|
372
|
+
|
|
373
|
+
cascade:preferredLanguage a owl:DatatypeProperty ;
|
|
374
|
+
rdfs:label "Preferred Language"@en ;
|
|
375
|
+
rdfs: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."@en ;
|
|
376
|
+
rdfs:domain cascade:PatientProfile ;
|
|
377
|
+
rdfs:range xsd:string .
|
|
378
|
+
|
|
379
|
+
# ============================================================================
|
|
380
|
+
# Address (v2.0)
|
|
381
|
+
# ============================================================================
|
|
382
|
+
# Structured postal address. Reuses FHIR Address semantics.
|
|
383
|
+
# Used by PatientProfile (home address) and PharmacyInfo (pharmacy location).
|
|
384
|
+
|
|
385
|
+
cascade:Address a owl:Class ;
|
|
386
|
+
rdfs:label "Address"@en ;
|
|
387
|
+
rdfs:comment "Structured postal address reusing FHIR Address semantics. Used by PatientProfile and PharmacyInfo."@en .
|
|
388
|
+
|
|
389
|
+
cascade:streetAddress a owl:DatatypeProperty ;
|
|
390
|
+
rdfs:label "Street Address"@en ;
|
|
391
|
+
rdfs:comment "Street line(s) of the address. Simplified alias of cascade:addressLine for flat serialization patterns."@en ;
|
|
392
|
+
rdfs:domain cascade:Address ;
|
|
393
|
+
rdfs:range xsd:string .
|
|
394
|
+
|
|
395
|
+
cascade:city a owl:DatatypeProperty ;
|
|
396
|
+
rdfs:label "City"@en ;
|
|
397
|
+
rdfs:comment "City name. Simplified alias of cascade:addressCity for flat serialization patterns."@en ;
|
|
398
|
+
rdfs:domain cascade:Address ;
|
|
399
|
+
rdfs:range xsd:string .
|
|
400
|
+
|
|
401
|
+
cascade:state a owl:DatatypeProperty ;
|
|
402
|
+
rdfs:label "State"@en ;
|
|
403
|
+
rdfs:comment "State or province. Simplified alias of cascade:addressState for flat serialization patterns."@en ;
|
|
404
|
+
rdfs:domain cascade:Address ;
|
|
405
|
+
rdfs:range xsd:string .
|
|
406
|
+
|
|
407
|
+
cascade:postalCode a owl:DatatypeProperty ;
|
|
408
|
+
rdfs:label "Postal Code"@en ;
|
|
409
|
+
rdfs:comment "ZIP or postal code. Simplified alias of cascade:addressPostalCode for flat serialization patterns."@en ;
|
|
410
|
+
rdfs:domain cascade:Address ;
|
|
411
|
+
rdfs:range xsd:string .
|
|
412
|
+
|
|
413
|
+
cascade:country a owl:DatatypeProperty ;
|
|
414
|
+
rdfs:label "Country"@en ;
|
|
415
|
+
rdfs:comment "Country name or ISO 3166-1 code. Simplified alias of cascade:addressCountry for flat serialization patterns."@en ;
|
|
416
|
+
rdfs:domain cascade:Address ;
|
|
417
|
+
rdfs:range xsd:string .
|
|
418
|
+
|
|
419
|
+
# FHIR-aligned Address properties (v2.2, Phase 3.5 ONT1)
|
|
420
|
+
# These mirror the FHIR Address datatype fields used by the SDK Address struct.
|
|
421
|
+
# The simpler properties (streetAddress, city, state, postalCode, country) are
|
|
422
|
+
# retained as aliases for CheckupSerializer backward compatibility.
|
|
423
|
+
|
|
424
|
+
cascade:addressUse a owl:DatatypeProperty ;
|
|
425
|
+
rdfs:label "Address Use"@en ;
|
|
426
|
+
rdfs:comment "Purpose of the address: home, work, temp, old. Aligns with FHIR Address.use."@en ;
|
|
427
|
+
rdfs:domain cascade:Address ;
|
|
428
|
+
rdfs:range xsd:string .
|
|
429
|
+
|
|
430
|
+
cascade:addressType a owl:DatatypeProperty ;
|
|
431
|
+
rdfs:label "Address Type"@en ;
|
|
432
|
+
rdfs:comment "Type of address: postal, physical, both. Aligns with FHIR Address.type."@en ;
|
|
433
|
+
rdfs:domain cascade:Address ;
|
|
434
|
+
rdfs:range xsd:string .
|
|
435
|
+
|
|
436
|
+
cascade:addressText a owl:DatatypeProperty ;
|
|
437
|
+
rdfs:label "Address Text"@en ;
|
|
438
|
+
rdfs:comment "Full address as a single text string. Aligns with FHIR Address.text."@en ;
|
|
439
|
+
rdfs:domain cascade:Address ;
|
|
440
|
+
rdfs:range xsd:string .
|
|
441
|
+
|
|
442
|
+
cascade:addressLine a owl:DatatypeProperty ;
|
|
443
|
+
rdfs:label "Address Line"@en ;
|
|
444
|
+
rdfs:comment "Street address line. Repeatable for multi-line addresses. Aligns with FHIR Address.line."@en ;
|
|
445
|
+
rdfs:domain cascade:Address ;
|
|
446
|
+
rdfs:range xsd:string .
|
|
447
|
+
|
|
448
|
+
cascade:addressCity a owl:DatatypeProperty ;
|
|
449
|
+
rdfs:label "Address City"@en ;
|
|
450
|
+
rdfs:comment "City name. FHIR-aligned equivalent of cascade:city. Aligns with FHIR Address.city."@en ;
|
|
451
|
+
rdfs:domain cascade:Address ;
|
|
452
|
+
rdfs:range xsd:string .
|
|
453
|
+
|
|
454
|
+
cascade:addressDistrict a owl:DatatypeProperty ;
|
|
455
|
+
rdfs:label "Address District"@en ;
|
|
456
|
+
rdfs:comment "District or county. Aligns with FHIR Address.district."@en ;
|
|
457
|
+
rdfs:domain cascade:Address ;
|
|
458
|
+
rdfs:range xsd:string .
|
|
459
|
+
|
|
460
|
+
cascade:addressState a owl:DatatypeProperty ;
|
|
461
|
+
rdfs:label "Address State"@en ;
|
|
462
|
+
rdfs:comment "State or province. FHIR-aligned equivalent of cascade:state. Aligns with FHIR Address.state."@en ;
|
|
463
|
+
rdfs:domain cascade:Address ;
|
|
464
|
+
rdfs:range xsd:string .
|
|
465
|
+
|
|
466
|
+
cascade:addressPostalCode a owl:DatatypeProperty ;
|
|
467
|
+
rdfs:label "Address Postal Code"@en ;
|
|
468
|
+
rdfs:comment "Postal or ZIP code. FHIR-aligned equivalent of cascade:postalCode. Aligns with FHIR Address.postalCode."@en ;
|
|
469
|
+
rdfs:domain cascade:Address ;
|
|
470
|
+
rdfs:range xsd:string .
|
|
471
|
+
|
|
472
|
+
cascade:addressCountry a owl:DatatypeProperty ;
|
|
473
|
+
rdfs:label "Address Country"@en ;
|
|
474
|
+
rdfs:comment "Country name or ISO code. FHIR-aligned equivalent of cascade:country. Aligns with FHIR Address.country."@en ;
|
|
475
|
+
rdfs:domain cascade:Address ;
|
|
476
|
+
rdfs:range xsd:string .
|
|
477
|
+
|
|
478
|
+
# ============================================================================
|
|
479
|
+
# Pharmacy Info (v2.0)
|
|
480
|
+
# ============================================================================
|
|
481
|
+
# Preferred pharmacy for prescriptions. Manual entry only (no Apple import source).
|
|
482
|
+
|
|
483
|
+
cascade:PharmacyInfo a owl:Class ;
|
|
484
|
+
rdfs:label "Pharmacy Info"@en ;
|
|
485
|
+
rdfs:comment "Preferred pharmacy for prescriptions. Manual entry only (no Apple Health import source). Linked from PatientProfile via cascade:hasPreferredPharmacy."@en .
|
|
486
|
+
|
|
487
|
+
cascade:pharmacyName a owl:DatatypeProperty ;
|
|
488
|
+
rdfs:label "Pharmacy Name"@en ;
|
|
489
|
+
rdfs:comment "Name of the pharmacy."@en ;
|
|
490
|
+
rdfs:domain cascade:PharmacyInfo ;
|
|
491
|
+
rdfs:range xsd:string .
|
|
492
|
+
|
|
493
|
+
cascade:pharmacyPhone a owl:DatatypeProperty ;
|
|
494
|
+
rdfs:label "Pharmacy Phone"@en ;
|
|
495
|
+
rdfs:comment "Phone number of the pharmacy."@en ;
|
|
496
|
+
rdfs:domain cascade:PharmacyInfo ;
|
|
497
|
+
rdfs:range xsd:string .
|
|
498
|
+
|
|
499
|
+
# Note: PharmacyInfo reuses cascade:hasAddress for its location.
|
|
500
|
+
|
|
501
|
+
# ============================================================================
|
|
502
|
+
# Advance Directives (v2.0)
|
|
503
|
+
# ============================================================================
|
|
504
|
+
# Patient-reported advance directive declarations. Elevated PHI sensitivity.
|
|
505
|
+
|
|
506
|
+
cascade:AdvanceDirectives a owl:Class ;
|
|
507
|
+
rdfs:label "Advance Directives"@en ;
|
|
508
|
+
rdfs:comment "Patient-reported advance directive declarations. Elevated PHI sensitivity. Linked from PatientProfile via cascade:hasAdvanceDirectives."@en .
|
|
509
|
+
|
|
510
|
+
cascade:hasLivingWill a owl:DatatypeProperty ;
|
|
511
|
+
rdfs:label "Has Living Will"@en ;
|
|
512
|
+
rdfs:comment "Whether the patient has a living will on file."@en ;
|
|
513
|
+
rdfs:domain cascade:AdvanceDirectives ;
|
|
514
|
+
rdfs:range xsd:boolean .
|
|
515
|
+
|
|
516
|
+
cascade:hasPowerOfAttorney a owl:DatatypeProperty ;
|
|
517
|
+
rdfs:label "Has Power of Attorney"@en ;
|
|
518
|
+
rdfs:comment "Whether the patient has a healthcare power of attorney on file."@en ;
|
|
519
|
+
rdfs:domain cascade:AdvanceDirectives ;
|
|
520
|
+
rdfs:range xsd:boolean .
|
|
521
|
+
|
|
522
|
+
cascade:hasDNR a owl:DatatypeProperty ;
|
|
523
|
+
rdfs:label "Has DNR"@en ;
|
|
524
|
+
rdfs:comment "Whether the patient has a do-not-resuscitate order on file."@en ;
|
|
525
|
+
rdfs:domain cascade:AdvanceDirectives ;
|
|
526
|
+
rdfs:range xsd:boolean .
|
|
527
|
+
|
|
528
|
+
cascade:advanceDirectiveNotes a owl:DatatypeProperty ;
|
|
529
|
+
rdfs:label "Advance Directive Notes"@en ;
|
|
530
|
+
rdfs:comment "Optional free-text notes about advance directives."@en ;
|
|
531
|
+
rdfs:domain cascade:AdvanceDirectives ;
|
|
532
|
+
rdfs:range xsd:string .
|
|
533
|
+
|
|
534
|
+
# ============================================================================
|
|
535
|
+
# Alignment with W3C PROV-O
|
|
536
|
+
# ============================================================================
|
|
537
|
+
|
|
538
|
+
# Cascade Protocol extends PROV-O for provenance tracking
|
|
539
|
+
# All health data entities are prov:Entity instances
|
|
540
|
+
# creatorWebID links to prov:Agent (the user)
|
|
541
|
+
# Generation activities tracked via prov:wasGeneratedBy
|
|
542
|
+
|
|
543
|
+
# Example usage:
|
|
544
|
+
# <#pots-check-123> a pots:POTSCheckResult ;
|
|
545
|
+
# cascade:schemaVersion "1.2" ;
|
|
546
|
+
# cascade:dataProvenance cascade:ConsumerGenerated ;
|
|
547
|
+
# prov:wasAttributedTo <https://id.cascadeprotocol.org/users/abc123> ;
|
|
548
|
+
# prov:wasGeneratedBy [
|
|
549
|
+
# a prov:Activity ;
|
|
550
|
+
# prov:wasAssociatedWith <https://id.cascadeprotocol.org/users/abc123> ;
|
|
551
|
+
# prov:startedAtTime "2025-10-31T10:00:00Z"^^xsd:dateTime
|
|
552
|
+
# ] .
|
|
553
|
+
|
|
554
|
+
# ============================================================================
|
|
555
|
+
# Changelog
|
|
556
|
+
# ============================================================================
|
|
557
|
+
# v2.2 (2026-02-18): FHIR-aligned Address expansion and PatientProfile
|
|
558
|
+
# completeness (Phase 3.5 ONT1 + ONT2).
|
|
559
|
+
# ONT1: Added 9 FHIR Address.* aligned properties (addressUse, addressType,
|
|
560
|
+
# addressText, addressLine, addressCity, addressDistrict, addressState,
|
|
561
|
+
# addressPostalCode, addressCountry). Existing simple properties (streetAddress,
|
|
562
|
+
# city, state, postalCode, country) retained as aliases. Updated simple
|
|
563
|
+
# property comments to note alias relationship.
|
|
564
|
+
# ONT2: Added PatientProfile properties emitted by SDK serializer:
|
|
565
|
+
# computedAge, profileId, pharmacyAddress, preferredLanguage. Added
|
|
566
|
+
# EmergencyContact class with contactName, contactRelationship, contactPhone.
|
|
567
|
+
# Added object properties: emergencyContact, advanceDirectives,
|
|
568
|
+
# preferredPharmacy, address (blank-node linking variants used by
|
|
569
|
+
# PatientProfileSerializer).
|
|
570
|
+
# v2.1 (2026-02-17): Added cascade:addedInSchemaVersion annotation property
|
|
571
|
+
# and cascade:cascadeUri datatype property. Previously dark vocabulary
|
|
572
|
+
# emitted by CheckupSerializer (supplement section). Part of Schema
|
|
573
|
+
# Refactoring Plan Phase 3 (PF1-R).
|
|
574
|
+
# v1.0 (2025-10-31): Initial release. Schema versioning, data provenance
|
|
575
|
+
# (ConsumerGenerated / ClinicalGenerated), identity (creatorWebID),
|
|
576
|
+
# W3C PROV-O alignment.
|
|
577
|
+
# v1.1 (2026-02-01): DataSource class — device/app/system identity with
|
|
578
|
+
# reliability tiers (clinical, medical_device, consumer_device,
|
|
579
|
+
# self_reported), bundle identifier, and metric coverage. Subclasses
|
|
580
|
+
# prov:Agent. Reconciliation strategy deferred to post-MVP.
|
|
581
|
+
# v2.0 (2026-02-17): Patient demographics and identity classes. Added
|
|
582
|
+
# cascade:PatientProfile class with 12 properties (dateOfBirth,
|
|
583
|
+
# genderIdentity, biologicalSex, ageGroup, emergencyContactName,
|
|
584
|
+
# emergencyContactRelationship, emergencyContactPhone, hasAddress,
|
|
585
|
+
# maritalStatus, raceEthnicity, hasPreferredPharmacy,
|
|
586
|
+
# hasAdvanceDirectives). Added 4 supporting classes: Address (5 properties),
|
|
587
|
+
# PharmacyInfo (2 properties + reuses hasAddress), AdvanceDirectives
|
|
588
|
+
# (4 properties). Designed as Solid WebID Profile extension with
|
|
589
|
+
# two-document model (foaf:Agent card.ttl + cascade:PatientProfile
|
|
590
|
+
# health.ttl linked via rdfs:seeAlso). Added foaf: and vcard: prefix
|
|
591
|
+
# declarations. Part of Schema Refactoring Plan Phase 3 (WS6a).
|
|
592
|
+
# v1.3 (2026-02-17): Added cascade:subConcern annotation property for
|
|
593
|
+
# classifying vocabulary classes by functional role (summary, intake,
|
|
594
|
+
# analytics, identity, app-config, structural, deprecated). Added shared
|
|
595
|
+
# preference properties: notificationsEnabled, preferredUnits. Part of
|
|
596
|
+
# Schema Refactoring Plan Phase 1 (WS2 + WS5).
|
|
597
|
+
# v1.2 (2026-02-10): Promoted ConsumerGenerated and ClinicalGenerated from
|
|
598
|
+
# OWL individuals to owl:Class subclasses of DataProvenance. Added 6
|
|
599
|
+
# DataProvenance subclasses: DeviceGenerated, SelfReported,
|
|
600
|
+
# ConsumerWellness (under ConsumerGenerated); EHRVerified, ScannedDocument,
|
|
601
|
+
# AIExtracted (under ClinicalGenerated). Aligns with SDK DataProvenance
|
|
602
|
+
# enum (6 cases). Backward-compatible: existing data using
|
|
603
|
+
# cascade:ConsumerGenerated/ClinicalGenerated remains valid.
|