US Prescription Drug Monitoring Program (PDMP)
1.0.0-ballot - STU1 Ballot United States of America flag

US Prescription Drug Monitoring Program (PDMP), published by HL7 International / Pharmacy. This guide is not an authorized publication; it is the continuous build for version 1.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-pdmp/ and changes regularly. See the Directory of published versions

Mappings to Related Standards

Other Data Standards Supporting the PDMP Ecosystem

The broad PDMP ecosystem - from writing a prescription to reporting PDMP history - employs a combination of NCPDP, ASAP and PMIX/NIEM standards, as illustrated below:

Figure 1: Standards supporting the PDMP ecosystem

In Figure 1, above,

  • prescribers write a prescription and forward it electronically to the pharmacy using NCPDP SCRIPT.
  • upon dispensation or sale of the prescription, the pharmacy reports the dispensation to the appropriate PDMP system(s) using ASAP Standard for Prescription Drug Monitoring Programs (ASAP Reporting)
  • PDMP systems exchange information between each other using PMIX/NIEM
  • in contrast, getting the PDMP information to providers (prescribers and pharmacists) does not utilize a single, consistent, methodology. Current implementations include
    • all PDMP provide a web portal for provider access
    • some PDMPs support NCPDP SCRIPT RxHistory for PDMP report request/response
    • some PDMPs support ASAP Web Services for PDMP report request/response
    • some PDMPs have other proprietary integration options for PDMP report request/response

In introducing FHIR as a methodology in connecting providers (prescribers and pharmacists) to the PDMPs, the Implementation Guide stakeholders agreed that mappings between FHIR, PMIX/NIEM, and NCPDP SCRIPT RxHistory may be beneficial for users of this Implementation Guide.

Mapping

Mapping from each FHIR resource in this Implementation Guide to PMIX/NIEM and NCPDP SCRIPT RxHistory is included in the resource profile pages. On the resource page (e.g., PDMP MedicationDispense), click on the ‘Mappings’ tab and scroll to find the mapping of interest. The following tables consolidate the mappings for request and response scenarios by standard.

Resources which are not profiled in this Implementation Guide (e.g, US Core Prescriber) do not include mappings to PMIX/NIEM or NCPDP SCRIPT RxHistory. Mapping to these resources is included below, but is not included in the resource definitions (e.g., the mapping tab for US Core Prescriber does not include mapping to PMIX/NIEM)

Fully qualified element names in each standard can be very long. To reduce the text in each cell, the tables below provide “context” and “XPath” or “FHIRPath” for the mapped data elements. The context is a simplified representation of the XPath/FHIRPath referring to the major nodes in the XML Schema, or PDMP FHIR Bundles defined in this Implementation Guide. The XPath/FHIRPath are prefixes to the XPath or FHIRPath for each element in the table.

NCPDP to FHIR Mapping for Request

This section includes a representative field mapping from NCPDP SCRIPT 2017071 RxHistoryRequest to the FHIR elements in this Implementation Guide.

</tr>
Element Group Element Name NCPDP Data Element FHIR Data Element
Request context: Message
XPath:/Message
context: pdmp-bundle-request-message
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message')
Request ID Header/MessageID entry.resource.where(resourceType='MessageHeader').id
Request date/time Header/SentTime timestamp
Start Date Body/RxHistoryRequest/RequestedDates/StartDate not supported
End Date Body/RxHistoryRequest/RequestedDates/EndDate; not supported
Patient context: Rx History Request / Patient
XPath: /Message/Body/RxHistoryRequest/Patient/HumanPatient
context: pdmp-bundle-request-message / pdmp-parameters-request / us-core-practitioner
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message').entry.resource.where(resourceType='Parameters').parameter.resource.where(resourceType='Patient')
First Name Name/FirstName name.given
Last Name Name/LastName name.family
Date of Birth DateOfBirth birthdate
Requester context: Rx History Request / Prescriber
XPath: /Message/Body/RxHistoryRequest/Prescriber/NonVeterinarian
context: pdmp-bundle-request-message / pdmp-parameters-request / us-core-practitioner
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message').entry.resource.where(resourceType='Parameters').parameter.resource.where(resourceType='Practitioner')
Name Name name
NPI Identification/NPI identifier.where(system='http://hl7.org/fhir/sid/us-npi').value
DEA Identification/DEANumber identifier.where(system='http://terminology.hl7.org/NamingSystem/usdeanumber)'.value
Requesting Facility context: Rx History Request / Facility
XPath: /Message/Body/RxHistoryRequest
context: pdmp-bundle-request-message / pdmp-parameters-request / us-core-organization
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message').entry.resource.where(resourceType='Parameters').parameter.resource.where(resourceType='Organization')
Name FacilityName name
State Address/StateProvince address.state
DEA Identification/DEANumber identifier.where(system='http://terminology.hl7.org/NamingSystem/usdeanumber)'.value
NCPDP ID Identification/NCPDPID identifier.where(system='http://terminology.hl7.org/CodeSystem/NCPDPProviderIdentificationNumber').value
NPI Identification/NPI identifier.where(system='http://hl7.org/fhir/sid/us-npi').value

NCPDP to FHIR Mappings for Response

This section includes a representative field mapping from NCPDP SCRIPT 2017071 RxHistoryResponse to the FHIR elements in this Implementation Guide.

</tr> </tr>
Element Group Element Name NCPDP Data Element FHIR Data Element
Response Information context: Message
XPath: /Message
context: pdmp-bundle-response-message
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(resourceType='MessageHeader')
Request ID Header/RelatesToMessageID response.identifier
Response Date/Time Header/SentTime Parameters.extension.where(extension.url='phttp://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-header-timestamp-extension')
Report Start Date Body/RxHistoryResponse/RequestedDates/StartDate Parameters.extension.where(extension.url='phttp://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-activity-period-extension').valuePeriod.start
Report End date Body/RxHistoryResponse/RequestedDates/EndDate Parameters.extension.where(extension.url='phttp://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-activity-period-extension').valuePeriod.end
Patient context: Message / RxHistoryResponse / Patient /Message/Body/RxHistoryResponse/Patient/HumanPatient context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(resourceType='Parameters').parameter.where(name='pdmp-history-data').resource.entry.resource.where(resourceType='Patient')
First Name Name/FirstName name.given
Last Name Name/LastName name.family
Date of Birth DateOfBirth birthdate
Gender Gender gender
Street Address 1 Address/AddressLine1 address.line[0]
Street Address 2 Address/AddressLine2 address.line[1]
City Address Address/City address.city
State Code Address/StateProvince address.state
Zip Code Address/PostalCode address.postalCode
SSN Identification/SocialSecurity identifier.where(system=http://hl7.org/fhir/sid/us-ssn)
Prescription context: Message / RxHistoryResponse / MedicationDispensed /Message/Body/RxHistoryResponse/MedicationDispensed context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(resourceType='Parameters').parameter.where(name='pdmp-history-data').resource.entry.resource.where(resourceType='MedicationDispense')
Filled Date LastFillDate whenPrepared
Written Date WrittenDate authorizingPrescription.authoredOn
Number HistorySource/SourceReference identifier
Drug Name DrugDescription medicationCodeableConcept.text
Product ID Qualifier (NDC) DrugCoded/ProductCode/Qualifier = 'ND' medicationCodeableConcept.coding.system = 'http://hl7.org/fhir/sid/ndc'
Product ID (NDC) DrugCoded/ProductCode/Code medicationCodeableConcept.coding.where(system='http://hl7.org/fhir/sid/ndc').code
Drug Strength DrugCoded/Strength medicationCodeableConcept.ingredient.strength
Dosage Form Quantity/QuantityUnitOfMeasure medicationCodeableConcept.form
Drug Quantity Quantity/Value quantity
Days of Supply DaysSupply daysSupply
Refill Number HistorySource/FillNumber extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-rx-fill-number').valuePositiveInt
Refills Authorized not directly represented in RxHistoryResponse authorizingPrescription.dispenseRequest.numberOfRepeatsAllowed
Partial Fill Indicator not supported in RxHistoryResponse type
Method of Payment HistorySource/PaymentType extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-method-of-payment')
Opioid Treatment Code not supported extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-opioid-treatment-code').Coding.code
Transmission Method not supported extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-rx-transmission-method').Coding.code
Dispenser Organization context: Message / RxHistoryResponse / MedicationDispensed / Pharmacy/Message/Body/RxHistoryResponse/MedicationDispensed/Pharmacy context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(resourceType='Parameters').parameter.where(name='pdmp-history-data').resource.entry.resource.where(resourceType='Organization')
Name (Facility) BusinessName name
Street Address line 1 Address/AddressLine1 address.line[0]
Street Address line 2 Address/AddressLine2 address.line[1]
City Address Address/City address.city
State Code Address/StateProvince address.state
Zip Code Address/PostalCode address.postalCode
Phone Number CommunicationNumbers/PrimaryTelephone telecom
DEA Identification/DEANumber identifier.where(system='http://terminology.hl7.org/NamingSystem/usdeanumber)'.value
NCPDP ID Identification/NCPDPID identifier.where(system='http://terminology.hl7.org/CodeSystem/NCPDPProviderIdentificationNumber').value
NPI Identification/NPI identifier.where(system='http://hl7.org/fhir/sid/us-npi').value
Prescriber context: Message / RxHistoryResponse / MedicationDispensed / Prescriber /Message/Body/RxHistoryResponse/MedicationDispensed/Prescriber context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(resourceType='Parameters').parameter.where(name='pdmp-history-data').resource.entry.resource.where(resourceType='Prescriber')
First Name NonVeterinarian/Name/FirstName name.given
Last Name NonVeterinarian/Name/LastName name.family
Street Address Line 1 NonVeterinarian/Address/AddressLine1 address.line[0]
Street Address Line 2 Prescriber/NonVeterinarian/Address/AddressLine2 address.line[1]
City Address NonVeterinarian/Address/City Practitioner.address.city
State Code NonVeterinarian/Address/StateProvince Practitioner.address.state
Zip Code NonVeterinarian/Address/PostalCode address.postalCode
DEA Number NonVeterinarian/Identification/DEANumber identifier.where(system='http://terminology.hl7.org/NamingSystem/usdeanumber)'.value
NPI Number NonVeterinarian/Identification/NPI identifier.where(system='http://hl7.org/fhir/sid/us-npi').value
State License NonVeterinarian/Identification/StateLicenseNumber identifier
State of License not supported identifier.extension.where(url='http://hl7.org/fhir/us/core/StructureDefinition/us-core-jurisdiction')

PMIX to FHIR Mapping for Request

This section includes a representative field mapping from PMIX/NIEM 4.0 Request to the FHIR elements in this Implementation Guide.

Element Group Element Name PMIX Data Element FHIR Data Element
context: PMP Request
XPath: pmix:PMPRequest
context: pdmp-bundle-request-message / pdmp-parameters-request / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message').entry.resource.where(resourceType='Parameters').parameter.where(name='patient')
Request Date Range Start Date pmp:RequestPrescriptionDateRange/pmp:RequestPrescriptionDateRangeBegin not supported
End Date pmp:RequestPrescriptionDateRange/pmp:RequestPrescriptionDateRangeEnd not supported
context: pmix:PMPRequest context: pdmp-bundle-request-message / pdmp-parameters-request / pdmp-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-request-message').entry.resource.where(resourceType='Parameters').parameter.where(name='patient')
Patient First Name pmp:RequestPatient/nc:PersonName/nc:PersonGivenName Patient.name.given
Last Name pmp:RequestPatient/nc:PersonName/nc:PersonSurName Patient.name.family
Date of Birth pmp:RequestPatient/nc:PersonBirthDate/Date Patient.birthdate

PMIX to FHIR Mapping for Response

This section includes a representative field mapping from PMIX/NIEM 4.0 Prescription Report to the FHIR elements in this Implementation Guide.

Element Group Element Name PMIX Data Element FHIR Data Element
Response Information context: Response Report
XPath:pmix:PMPPrescriptionReport/pmp:RequestResponsePrescriptionReport
context: pdmp-bundle-response-message / pdmp-parameters-response
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-parameters-response').paramenter
Report Date/Time pmp:ReportExecutionDate
pmp:ReportExecutionTime
extension.where(extension.url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-header-timestamp-extension')
Report Start Date pmp:ReportDateRange/pmp:ReportDateRangeBegin extension.where(extension.url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-activity-period-extension').valuePeriod.start
Report End Date pmp:ReportDateRange/pmp:ReportDateRangeEnd extension.where(extension.url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-activity-period-extension').valuePeriod.end
Patient context: Response Report / Prescription / Patient
XPath: pmix:PMPPrescriptionReport/pmp:RequestResponsePrescriptionReport/pmp:Prescription/pmp:Patient
context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / us-core-patient
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-parameters-response').parameter.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-history-result').entry.resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient')
First Name nc:PersonName/nc:PersonGivenName name.given
Last Name nc:PersonName/nc:PersonSurName name.family
Date of Birth nc:PersonBirthDate/Date birthdate
Gender PersonSexCode gender
Street Address pmp:PersonPrimaryContactInformation/ContactMailingAddress/LocationStreet address.line
City Address pmp:PersonPrimaryContactInformation/ContactMailingAddress/nc:LocationCityName address.city
State Code pmp:PersonPrimaryContactInformation/ContactMailingAddress/LocationState address.state
Zip Code pmp:PersonPrimaryContactInformation/ContactMailingAddress/nc:LocationPostalCode address.postalCode
SSN PersonSocialSecurityNumberIdentifier identifier.where(system=http://hl7.org/fhir/sid/us-ssn).value
Prescription context: Response Report / Prescription
XPath: pmix:PMPPrescriptionReport/pmp:RequestResponsePrescriptionReport/pmp:Prescription
context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-medicationdispense
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-parameters-response').parameter.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-history-result').entry.resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/pdmp-medicationdispense')
Filled Date pmp:PrescriptionFilledDate whenPrepared
Written Date pmp:PrescriptionWrittenDate authorizingPrescription.authoredOn
Number pmp:PrescriptionNumberText identifier.value
Drug Name pmp:PrescriptionDrug/pmp:DrugProductNameText medicationCodeableConcept.text
Product NDC pmp:PrescriptionDrug/pmp:DrugNDCProductIdentifier medicationCodeableConcept.coding.where(system='http://hl7.org/fhir/sid/ndc').code
Drug Strength pmp:PrescriptionDrug/pmp:DrugStrengthText medicationCodeableConcept.ingredient.strength
Dosage Form pmp:PrescriptionDrug/pmp:DrugUnitOfMeasureText medicationCodeableConcept.form
Drug Quantity pmp:DispensedQuantity quantity
Days of Supply pmp:DaysSupplyCount daysSupply
Refill Number pmp:DrugRefillNumberCount extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-rx-fill-number').valuePositiveInt
Refills Authorized pmp:RefillsAuthorizedCount authorizingPrescription.dispenseRequest.numberOfRepeatsAllowed
Partial Fill Indicator pmp:PartialFillIndicator type
Method of Payment pmp:MethodOfPaymentCode extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-method-of-payment').code
Opioid Treatment Code pmp:OpioidTreatmentCategoryCode extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-opioid-treatment-code').Coding.code
Transmission Method pmp:TransmissionFormOfRxOriginCode extension.where(url='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-extension-rx-transmission-method').Coding.code
Dispenser Organization context: Response Report / Prescription / Dispenser
XPath: pmix:PMPPrescriptionReport/pmp:RequestResponsePrescriptionReport/pmp:Prescription/pmp:Dispenser
context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / pdmp-organization-pharmacy
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-parameters-response').parameter.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-history-result').entry.resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/pdmp-organization-pharmacy')
Name (Facility) nc:OrganizationDoingBusinessAsName name
Street Address nc:OrganizationPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationStreet/nc:StreetFullText address.line
City Address nc:OrganizationPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationCityName address.city
State Code nc:OrganizationPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationStateUSPostalServiceCode address.state
Zip Code nc:OrganizationPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationPostalCode address.postalCode
Phone Number nc:OrganizationPrimaryContactInformation/nc:ContactTelephoneNumber/nc:FullTelephoneNumber telecom
DEA pmp:DEANumberIdentifier identifier.where(system='http://terminology.hl7.org/NamingSystem/usdeanumber)'.value
NCPDP ID pmp:NCPDPIdentifier identifier.where(system='http://terminology.hl7.org/CodeSystem/NCPDPProviderIdentificationNumber').value
NPI pmp:NPIIdentifier identifier.where(system='http://hl7.org/fhir/sid/us-npi').value
Prescriber context: Response Report / Prescription / Prescriber
XPath: pmix:PMPPrescriptionReport/pmp:RequestResponsePrescriptionReport/pmp:Prescription/pmp:Prescriber
context: pdmp-bundle-response-message / pdmp-parameters-response / pdmp-history-data / us-core-practitioner
FHIRPath: Bundle.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-response-message').entry.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-parameters-response').parameter.resource.where(meta.profile='http://hl7.org/fhir/us/pdmp/StructureDefinition/pdmp-bundle-history-result').entry.resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner')
First Name nc:PersonName/nc:PersonGivenName resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').name.given
Last Name nc:PersonName/nc:PersonSurName resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').name.family
Street Address pmp:PersonPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationStreet/nc:StreetFullText resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').address.line
City Address pmp:PersonPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationCityName resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').address.city
State Code pmp:PersonPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationStateUSPostalServiceCode resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').address.state
Zip Code pmp:PersonPrimaryContactInformation/nc:ContactMailingAddress/nc:LocationPostalCode resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').address.postalCode
DEA pmp:DEANumberIdentifier/nc:IdentificationID resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').identifier
NPI pmp:NPIIdentifier/nc:IdentificationID resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').identifier.where(coding.system'http://hl7.org/fhir/sid/us-npi')
State License pmp:StateLicenseIdentifier:nc:IdentificationID resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').identifier
State of License pmp:StateLicenseIdentifier:nc:IdentificationJurisdiction resource.where(meta.profile='http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner').identifier