Python SDK for the Cascade Protocol — privacy-first health data serialization in RDF/Turtle
Project description
cascade-protocol
Python SDK for the Cascade Protocol — a privacy-first, local-first standard for serializing personal health data as RDF/Turtle.
Installation
pip install cascade-protocol
With optional extras:
pip install "cascade-protocol[pandas]" # pandas DataFrame integration
pip install "cascade-protocol[validation]" # SHACL validation via pyshacl
pip install "cascade-protocol[notebooks]" # Jupyter notebook support
pip install "cascade-protocol[all]" # Everything
Quick Start
from cascade_protocol import Medication, serialize, validate, Pod
# Create a medication record
med = Medication(
id="urn:uuid:med0-0001-aaaa-bbbb-ccccddddeeee",
medication_name="Metoprolol Succinate",
is_active=True,
dose="25mg",
data_provenance="ClinicalGenerated",
schema_version="1.3",
)
# Serialize to Turtle
turtle = serialize(med)
print(turtle)
# Validate structural integrity
result = validate(turtle)
print(result.is_valid, result.errors)
# Open a Cascade Pod and query records
pod = Pod.open("./my-pod")
meds = pod.query("medications")
# Convert to pandas DataFrame (requires pandas extra)
df = meds.to_dataframe()
print(df.head())
# Reconstruct models from DataFrame
restored = Medication.from_dataframe(df)
Serialization Output
@prefix cascade: <https://ns.cascadeprotocol.org/core/v1#> .
@prefix health: <https://ns.cascadeprotocol.org/health/v1#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<urn:uuid:med0-0001-aaaa-bbbb-ccccddddeeee> a health:MedicationRecord ;
health:medicationName "Metoprolol Succinate" ;
health:isActive true ;
cascade:dataProvenance cascade:ClinicalGenerated ;
cascade:schemaVersion "1.3" ;
health:dose "25mg" .
Supported Data Types
| Class | RDF Type | Description |
|---|---|---|
Medication |
health:MedicationRecord |
Prescription and OTC drugs |
Condition |
health:ConditionRecord |
Medical diagnoses |
Allergy |
health:AllergyRecord |
Allergies and intolerances |
LabResult |
health:LabResultRecord |
Laboratory test results |
VitalSign |
clinical:VitalSign |
Vital sign measurements |
Immunization |
health:ImmunizationRecord |
Vaccine records |
Procedure |
health:ProcedureRecord |
Clinical procedures |
FamilyHistory |
health:FamilyHistoryRecord |
Family health history |
Coverage |
coverage:InsurancePlan |
Insurance coverage |
PatientProfile |
cascade:PatientProfile |
Patient demographics |
ActivitySnapshot |
health:ActivitySnapshot |
Daily activity data |
SleepSnapshot |
health:SleepSnapshot |
Nightly sleep data |
Encounter |
clinical:Encounter |
Clinical encounters and visits |
MedicationAdministration |
clinical:MedicationAdministration |
Medication administration events |
ImplantedDevice |
clinical:ImplantedDevice |
Implanted medical devices |
ImagingStudy |
clinical:ImagingStudy |
Imaging studies and results |
ClaimRecord |
coverage:ClaimRecord |
Insurance claim records |
BenefitStatement |
coverage:BenefitStatement |
Explanation of benefits |
DenialNotice |
coverage:DenialNotice |
Coverage denial notices |
AppealRecord |
coverage:AppealRecord |
Denial appeal records |
Pod API
from cascade_protocol import Pod
pod = Pod.open("./my-pod")
# Query by data type
meds = pod.query("medications")
vitals = pod.query("vital-signs")
profile = pod.query("patient-profile")
# Iterate records
for med in meds:
print(med.medication_name, med.dose)
# DataFrame conversion
df = meds.to_dataframe()
Parsing Turtle
from cascade_protocol.deserializer import parse, parse_one
# Parse multiple records
meds = parse(turtle_string, "MedicationRecord")
# Parse a single record
med = parse_one(turtle_string, "MedicationRecord")
Namespaces
from cascade_protocol.vocabularies import NAMESPACES, CURRENT_SCHEMA_VERSION
print(NAMESPACES["cascade"]) # https://ns.cascadeprotocol.org/core/v1#
print(NAMESPACES["health"]) # https://ns.cascadeprotocol.org/health/v1#
print(CURRENT_SCHEMA_VERSION) # 1.3
Privacy & Security
- Zero network calls during normal operation
- All processing is local
- No telemetry or analytics
- Data never leaves your machine
License
Apache 2.0 — see LICENSE.
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cascade_protocol-1.3.0.tar.gz
(55.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cascade_protocol-1.3.0.tar.gz.
File metadata
- Download URL: cascade_protocol-1.3.0.tar.gz
- Upload date:
- Size: 55.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67f6671fb3a9f127bf28d615d7337069af0b08e68159e5a5c1e960e0210e98e4
|
|
| MD5 |
3618e0068a9e6a45436749a3b7a8d246
|
|
| BLAKE2b-256 |
6cee8c1e2d9c60297c4ab75d5f9fe0ac744af805d438b28d8d33fb57143382f3
|
File details
Details for the file cascade_protocol-1.3.0-py3-none-any.whl.
File metadata
- Download URL: cascade_protocol-1.3.0-py3-none-any.whl
- Upload date:
- Size: 69.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cf4d27b3f9c94a27d71b010b3c5543ac39e235e07461d121e9ef337758d41b4
|
|
| MD5 |
85fb8fd3c99bcee956e276d72b1fb124
|
|
| BLAKE2b-256 |
d2b20fad1b61ec075758099cbfc0b02a7ff46013d760ec6f80614d7271131e85
|