Indivo Data Model: Medication¶
Model Definition¶
As SDML:
{
"__modelname__": "Medication",
"drugName": "CodedValue",
"endDate": "Date",
"frequency": "ValueAndUnit",
"instructions": "String",
"provenance": "Code",
"quantity": "ValueAndUnit",
"startDate": "Date",
"fulfillments": [{
"__modelname__": "Fill",
"date": "Date",
"dispenseDaysSupply": "Number",
"pbm": "String",
"pharmacy": "Pharmacy",
"provider": "Provider",
"quantityDispensed": "ValueAndUnit"
}]
}
As a Django Model Class:
from indivo.models import Fact
from django.db import models
from indivo.fields import CodedValueField, CodeField, ValueAndUnitField, PharmacyField, ProviderField
class Medication(Fact):
name = CodedValueField()
endDate = models.DateField(null=True)
frequency = ValueAndUnitField()
instructions = models.CharField(max_length=255, null=True)
provenance = CodeField()
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",
"name_title": "AMITRIPTYLINE HCL 50 MG TAB",
"name_code_title": "AMITRIPTYLINE HCL 50 MG TAB",
"name_code_system": "http://purl.bioontology.org/ontology/RXNORM/",
"name_code_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 xmlns="http://indivo.org/vocab/xml/documents#"> <Model name="Medication"> <Field name="name_title">AMITRIPTYLINE HCL 50 MG TAB</Field> <Field name="name_code_title">AMITRIPTYLINE HCL 50 MG TAB</Field> <Field name="name_code_system">http://purl.bioontology.org/ontology/RXNORM/</Field> <Field name="name_code_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_iso8601_datetime as date
med = Medication(
name_title="AMITRIPTYLINE HCL 50 MG TAB",
name_code_title="AMITRIPTYLINE HCL 50 MG TAB",
name_code_system="http://purl.bioontology.org/ontology/RXNORM/",
name_code_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()