diff --git a/.gitignore b/.gitignore index 68bc17f..e84b398 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Byte-compiled / optimized / DLL files +_version.py __pycache__/ *.py[cod] *$py.class diff --git a/README.md b/README.md index b97deac..b84b352 100644 --- a/README.md +++ b/README.md @@ -10,16 +10,11 @@ The Python type signature for the schema is as follows: Patient = TypedDict('Patient', { 'patient_id': int, - 'static_measurements': List[Measurement], 'events': List[Event], }) Event = TypedDict('Event',{ - 'time': datetime.datetime, - 'measurements': List[Measurement], -}) - -Measurement = TypedDict('Measurement', { + 'time': NotRequired[datetime.datetime], 'code': str, 'text_value': NotRequired[str], 'numeric_value': NotRequired[float], diff --git a/src/meds/__init__.py b/src/meds/__init__.py index 27701a2..2c76ef6 100644 --- a/src/meds/__init__.py +++ b/src/meds/__init__.py @@ -1,6 +1,6 @@ from meds._version import __version__ # noqa -from .schema import (patient_schema, Measurement, Event, Patient, label, Label, +from .schema import (patient_schema, Event, Patient, label, Label, code_metadata_entry, code_metadata, dataset_metadata, CodeMetadataEntry, CodeMetadata, DatasetMetadata, birth_code, death_code) @@ -9,7 +9,6 @@ # List all objects that we want to export _exported_objects = { 'patient_schema': patient_schema, - 'Measurement': Measurement, 'Event': Event, 'Patient': Patient, 'label': label, diff --git a/src/meds/schema.py b/src/meds/schema.py index 3689941..02e7f48 100644 --- a/src/meds/schema.py +++ b/src/meds/schema.py @@ -21,26 +21,23 @@ birth_code = "SNOMED/184099003" death_code = "SNOMED/419620001" - -def patient_schema(per_event_metadata_schema=pa.null()): +def patient_schema(per_event_properties_schema=pa.null()): # Return a patient schema with a particular per event metadata subschema - measurement = pa.struct( + event = pa.struct( [ + ("time", pa.timestamp("us")), # Static events will have a null timestamp ("code", pa.string()), ("text_value", pa.string()), ("numeric_value", pa.float32()), ("datetime_value", pa.timestamp("us")), - ("metadata", per_event_metadata_schema), + ("properties", per_event_properties_schema), ] ) - event = pa.struct([("time", pa.timestamp("us")), ("measurements", pa.list_(measurement))]) - patient = pa.schema( [ ("patient_id", pa.int64()), - ("static_measurements", pa.list_(measurement)), - ("events", pa.list_(event)), # Require ordered by time + ("events", pa.list_(event)), # Require ordered by time, nulls must be first ] ) @@ -49,20 +46,19 @@ def patient_schema(per_event_metadata_schema=pa.null()): # Python types for the above schema -Measurement = TypedDict( - "Measurement", +Event = TypedDict( + "Event", { + "time": NotRequired[datetime.datetime], "code": str, "text_value": NotRequired[str], "numeric_value": NotRequired[float], "datetime_value": NotRequired[datetime.datetime], - "metadata": NotRequired[Any], + "properties": NotRequired[Any], }, ) -Event = TypedDict("Event", {"time": datetime.datetime, "measurements": List[Measurement]}) - -Patient = TypedDict("Patient", {"patient_id": int, "static_measurements": List[Measurement], "events": List[Event]}) +Patient = TypedDict("Patient", {"patient_id": int, "events": List[Event]}) ############################################################ diff --git a/tests/test_schema.py b/tests/test_schema.py index ce27f9b..ccdf31b 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -15,22 +15,13 @@ def test_patient_schema(): patient_data = [ { "patient_id": 123, - "static_measurements": [{ - "code": "some_static_code", - "text_value": "example", - "numeric_value": 1.0, - "datetime_value": datetime.datetime(2019, 1, 1, 0, 0, 0), - "metadata": None, - }], "events": [{ # Nested list for events "time": datetime.datetime(2020, 1, 1, 12, 0, 0), - "measurements": [{ # Nested list for measurements - "code": "some_code", - "text_value": "Example", - "numeric_value": 10.0, - "datetime_value": datetime.datetime(2020, 1, 1, 12, 0, 0), - "metadata": None - }] + "code": "some_code", + "text_value": "Example", + "numeric_value": 10.0, + "datetime_value": datetime.datetime(2020, 1, 1, 12, 0, 0), + "properties": None }] } ]