Skip to content

Commit

Permalink
Initial checkin med admin tab
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewpeterkort committed Dec 4, 2024
1 parent 23b8978 commit 54d2955
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 1 deletion.
2 changes: 1 addition & 1 deletion gen3_tracker/meta/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def render_graph(config: Config, directory_path: str, output_path: str, browser:
@meta.command("dataframe")
@click.argument('data_type',
required=True,
type=click.Choice(['Specimen', 'DocumentReference', 'ResearchSubject']),
type=click.Choice(['Specimen', 'DocumentReference', 'ResearchSubject', "MedicationAdministration"]),
default=None)
@click.argument("directory_path",
type=click.Path(exists=True, file_okay=False),
Expand Down
24 changes: 24 additions & 0 deletions gen3_tracker/meta/dataframer.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,28 @@ def flattened_research_subjects(self) -> Generator[dict, None, None]:

yield flat_research_subject


def flattened_medication_administrations(self) -> Generator[dict, None, None]:

# get all MedicationAdministrations
cursor = self.connect()
cursor.execute(
"SELECT * FROM resources where resource_type = ?", ("MedicationAdministration",)
)

# get research subject and associated .subject patient
for _, _, raw_medication_administration in cursor.fetchall():
medication_administration = json.loads(raw_medication_administration)
flat_medication_administration = SimplifiedResource.build(
resource=medication_administration
).simplified

patient = get_subject(self, medication_administration)
flat_medication_administration.update(patient)

yield flat_medication_administration


def flattened_document_references(self) -> Generator[dict, None, None]:
"""generator that yields document references populated
with DocumentReference.subject fields and Observation codes through Observation.focus
Expand Down Expand Up @@ -607,6 +629,8 @@ def create_dataframe(
df = pd.DataFrame(db.flattened_document_references())
elif data_type == "ResearchSubject":
df = pd.DataFrame(db.flattened_research_subjects())
elif data_type == "MedicationAdministration":
df = pd.DataFrame(db.flattened_medication_administrations())
elif data_type == "Specimen":
df = pd.DataFrame(db.flattened_specimens())
else:
Expand Down
31 changes: 31 additions & 0 deletions gen3_tracker/meta/entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,35 @@ def values(self) -> dict:
return _values


class SimplifiedMedicationAdministration(SimplifiedFHIR):
@computed_field
@property
def values(self) -> dict:
"""Return a dictionary of 'value':value."""
_values = super().values
# Plucking out fields that didn't get picked up by default class simplifier.'
dose_value = self.resource.get("dosage", {}).get("dose", {}).get("value", None)
if dose_value:
_values["total_dosage"] = dose_value
occurenceTiming = self.resource.get("occurenceTiming", {}).get("repeat", {}).get("boundsRange")
if occurenceTiming:
low = occurenceTiming.get("low", {}).get("value")
_values["index_date_start_days"] = low if low else None
high = occurenceTiming.get("high", {}).get("value")
_values["index_date_end_days"] = high if high else None
for notes in self.resource.get("note", []):
note = notes.get("value", None)
if note:
# Probably best to concat notes together
_values["notes"] = _values["notes"] + "; " + note
for identifier in self.resource.get("identifier", []):
system = identifier.get("system", None)
if system:
if system.split("/")[-1] == "regimen":
_values["regimen_id"] = identifier["value"]
return _values


class SimplifiedCondition(SimplifiedFHIR):
@computed_field
@property
Expand Down Expand Up @@ -440,4 +469,6 @@ def build(resource: dict) -> SimplifiedFHIR:
return SimplifiedDocumentReference(resource=resource)
if resource_type == "Condition":
return SimplifiedCondition(resource=resource)
if resource_type == "MedicationAdministration":
return SimplifiedMedicationAdministration(resource=resource)
return SimplifiedFHIR(resource=resource)

0 comments on commit 54d2955

Please sign in to comment.