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()

Project Versions

Table Of Contents

Previous topic

Indivo Data Model: LabResult

Next topic

Indivo Data Model: Problem

This Page