Indivo Data Model: Medication¶
Model Definition¶
As SDML:
{
"__modelname__": "Medication",
"drugName": "CodedValue",
"endDate": "Date",
"frequency": "ValueAndUnit",
"instructions": "String",
"provenance": "CodedValue",
"quantity": "ValueAndUnit",
"startDate": "Date",
"fulfillments": [{
"__modelname__": "Fill",
"date": "Date",
"dispenseDaysSupply": "Number",
"pbm": "String",
"pharmacy": "Pharmacy",
"provider": "Provider",
"quantityDispensed": "ValueAndUnit"
}]
}
Note: Since SDML doesn’t provide for Boolean Fields, we are unable to define the dispense_as_written field properly in SDML. Our actual implementation of the Medication data model uses a Django Model Class for this reason.
As a Django Model Class:
from indivo.models import Fact
from django.db import models
from indivo.fields import CodedValueField, ValueAndUnitField, PharmacyField, ProviderField
class Medication(Fact):
drugName = CodedValueField()
endDate = models.DateField(null=True)
frequency = ValueAndUnitField()
instructions = models.CharField(max_length=255, null=True)
provenance = CodedValueField()
quantity = ValueAndUnitField()
startDate = models.DateField(null=True)
class Fill(Fact):
date = models.DateTimeField(null=True)
dispenseDaysSupply = models.FloatField(null=True)
pbm = models.CharField(max_length=255, null=True)
pharmacy = PharmacyField()
provider = ProviderField()
quantityDispensed = ValueAndUnitField()
medication = models.ForeignKey(Medication, null=True, related_name='fulfillments')
Examples¶
As SDMJ:
{
"__modelname__": "Medication",
"drugName_title": "AMITRIPTYLINE HCL 50 MG TAB",
"drugName_system": "http://purl.bioontology.org/ontology/RXNORM/",
"drugName_identifier": "856845",
"endDate": "2007-08-14",
"frequency_value": "2",
"frequency_unit": "/d",
"instructions": "Take two tablets twice daily as needed for pain",
"provenance_title": "Derived by prescription",
"provenance_system": "http://smartplatforms.org/terms/codes/MedicationProvenance#",
"provenance_identifier": "prescription",
"quantity_value": "2",
"quantity_unit": "{tablet}",
"startDate": "2007-03-14",
"fulfillments": [
{
"__modelname__": "Fill",
"date": "2007-03-14T04:00:00Z",
"dispenseDaysSupply": "30",
"pbm": "T00000000001011",
"pharmacy_ncpdpid": "5235235",
"pharmacy_org": "CVS #588",
"pharmacy_adr_country": "Australia",
"pharmacy_adr_city": "WonderCity",
"pharmacy_adr_postalcode": "5555",
"pharmacy_adr_street": "111 Lake Drive",
"provider_dea_number": "325555555",
"provider_npi_number": "5235235",
"provider_email": "joshua.mandel@fake.emailserver.com",
"provider_name_given": "Josuha",
"provider_name_family": "Mandel",
"provider_tel_1_type": "w",
"provider_tel_1_number": "1-235-947-3452",
"provider_tel_1_preferred_p: true,
"quantityDispensed_value": "60",
"quantityDispensed_unit": "{tablet}"
},
{
"__modelname__": "Fill",
"date": "2007-04-14T04:00:00Z",
"dispenseDaysSupply": "30",
"pbm": "T00000000001011",
"pharmacy_ncpdpid": "5235235",
"pharmacy_org": "CVS #588",
"pharmacy_adr_country": "Australia",
"pharmacy_adr_city": "WonderCity",
"pharmacy_adr_postalcode": "5555",
"pharmacy_adr_street": "111 Lake Drive",
"provider_dea_number": "325555555",
"provider_npi_number": "5235235",
"provider_email": "joshua.mandel@fake.emailserver.com",
"provider_name_given": "Josuha",
"provider_name_family": "Mandel",
"provider_tel_1_type": "w",
"provider_tel_1_number": "1-235-947-3452",
"provider_tel_1_preferred_p: true,
"quantityDispensed_value": "60",
"quantityDispensed_unit": "{tablet}"
}
]
}
As SDMX:
<Models>
<Model name="Medication">
<Field name="drugName_title">AMITRIPTYLINE HCL 50 MG TAB</Field>
<Field name="drugName_system">http://purl.bioontology.org/ontology/RXNORM/</Field>
<Field name="drugName_identifier">856845</Field>
<Field name="endDate">2007-08-14</Field>
<Field name="frequency_value">2</Field>
<Field name="frequency_unit">/d</Field>
<Field name="instructions">Take two tablets twice daily as needed for pain</Field>
<Field name="provenance_title">Derived by prescription</Field>
<Field name="provenance_system">http://smartplatforms.org/terms/codes/MedicationProvenance#</Field>
<Field name="provenance_identifier">prescription</Field>
<Field name="quantity_value">2</Field>
<Field name="quantity_unit">{tablet}</Field>
<Field name="startDate">2007-03-14</Field>
<Field name="fulfillments">
<Models>
<Model name="Fill">
<Field name="date">2007-03-14T04:00:00Z</Field>
<Field name="dispenseDaysSupply">30</Field>
<Field name="pbm">T00000000001011</Field>
<Field name="pharmacy_ncpdpid">5235235</Field>
<Field name="pharmacy_org">CVS #588</Field>
<Field name="pharmacy_adr_country">Australia</Field>
<Field name="pharmacy_adr_city">WonderCity</Field>
<Field name="pharmacy_adr_postalcode">5555</Field>
<Field name="pharmacy_adr_street">111 Lake Drive</Field>
<Field name="provider_dea_number">325555555</Field>
<Field name="provider_npi_number">5235235</Field>
<Field name="provider_email">joshua.mandel@fake.emailserver.com</Field>
<Field name="provider_name_given">Josuha</Field>
<Field name="provider_name_family">Mandel</Field>
<Field name="provider_tel_1_type">w</Field>
<Field name="provider_tel_1_number">1-235-947-3452</Field>
<Field name="provider_tel_1_preferred_p">true</Field>
<Field name="quantityDispensed_value">60</Field>
<Field name="quantityDispensed_unit">{tablet}</Field>
</Model>
<Model name="Fill">
<Field name="date">2007-04-14T04:00:00Z</Field>
<Field name="dispenseDaysSupply">30</Field>
<Field name="pbm">T00000000001011</Field>
<Field name="pharmacy_ncpdpid">5235235</Field>
<Field name="pharmacy_org">CVS #588</Field>
<Field name="pharmacy_adr_country">Australia</Field>
<Field name="pharmacy_adr_city">WonderCity</Field>
<Field name="pharmacy_adr_postalcode">5555</Field>
<Field name="pharmacy_adr_street">111 Lake Drive</Field>
<Field name="provider_dea_number">325555555</Field>
<Field name="provider_npi_number">5235235</Field>
<Field name="provider_email">joshua.mandel@fake.emailserver.com</Field>
<Field name="provider_name_given">Josuha</Field>
<Field name="provider_name_family">Mandel</Field>
<Field name="provider_tel_1_type">w</Field>
<Field name="provider_tel_1_number">1-235-947-3452</Field>
<Field name="provider_tel_1_preferred_p">true</Field>
<Field name="quantityDispensed_value">60</Field>
<Field name="quantityDispensed_unit">{tablet}</Field>
</Model>
</Models>
</Field>
</Model>
</Models>
As a Fact object:
from indivo.models import Medication, Fill
from indivo.lib.iso8601 import parse_utc_date as date
med = Medication(
drugName_title="AMITRIPTYLINE HCL 50 MG TAB",
drugName_system="http://purl.bioontology.org/ontology/RXNORM/",
drugName_identifier="856845",
endDate=date("2007-08-14"),
frequency_value="2",
frequency_unit="/d",
instructions="Take two tablets twice daily as needed for pain",
provenance_title="Derived by prescription",
provenance_system="http://smartplatforms.org/terms/codes/MedicationProvenance#",
provenance_identifier="prescription",
quantity_value="2",
quantity_unit="{tablet}",
startDate=date("2007-03-14"),
)
fill1 = Fill(
date=date("2007-03-14T04:00:00Z"),
dispenseDaysSupply=30,
pbm="T00000000001011",
pharmacy_ncpdpid="5235235",
pharmacy_org="CVS #588",
pharmacy_adr_country="Australia",
pharmacy_adr_city="WonderCity",
pharmacy_adr_postalcode="5555",
pharmacy_adr_street="111 Lake Drive",
provider_dea_number="325555555",
provider_npi_number="5235235",
provider_email="joshua.mandel@fake.emailserver.com",
provider_name_given="Josuha",
provider_name_family="Mandel",
provider_tel_1_type="w",
provider_tel_1_number="1-235-947-3452",
provider_tel_1_preferred_p=True,
quantityDispensed_value="60",
quantityDispensed_unit="{tablet}"
)
fill2 = Fill(
date=date("2007-04-14T04:00:00Z"),
dispenseDaysSupply=30,
pbm="T00000000001011",
pharmacy_ncpdpid="5235235",
pharmacy_org="CVS #588",
pharmacy_adr_country="Australia",
pharmacy_adr_city="WonderCity",
pharmacy_adr_postalcode="5555",
pharmacy_adr_street="111 Lake Drive",
provider_dea_number="325555555",
provider_npi_number="5235235",
provider_email="joshua.mandel@fake.emailserver.com",
provider_name_given="Josuha",
provider_name_family="Mandel",
provider_tel_1_type="w",
provider_tel_1_number="1-235-947-3452",
provider_tel_1_preferred_p=True,
quantityDispensed_value="60",
quantityDispensed_unit="{tablet}",
)
# save the medication so we can relate other objects to it
med.save()
med.fulfillments = [fill1, fill2]
med.save()