haau3 FHIR Implementation Guide (HFIG)
1.0.0 - ci-build United States of America flag

haau3 FHIR Implementation Guide (HFIG) - Local Development build (v1.0.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Pharmacy Benefits

Pharmacy Benefits is the pharmacy benefit check of the CARIN Consumer Real-Time Pharmacy Benefit Check guide (STU2 ballot, 2.0.0-ballot), served at https://api.haau3.com/v1/fhir/r4/$process-message. It answers what a medication would cost, in real time, from the sources it connects to. It is one of haau3's two Benefits services; the other, Plan Benefits, answers what a Medicare Advantage or Marketplace plan covers, from CMS's plan files.

One operation, two messages

A caller POSTs a FHIR message Bundle to $process-message, as the CARIN guide specifies, and gets the answer in the same exchange. Nothing a request carries is stored: each check is a point-in-time exchange.

  • Without patient details (event rtpbc-request-non-phi): a product, a quantity, and either a pharmacy or one or more ZIP codes (the preferredPharmacyPostalCode extension). The patient and the coverage are masked with data-absent-reason. This message is answered by price sources. Example request, its answer.
  • For a member (event rtpbc-request): the member's Patient and Coverage, the prescription and its prescriber, a pharmacy, a product and a quantity. This message is answered by the member's insurer or pharmacy benefit manager, found by the coverage's payer, so the Coverage carries payor.identifier. It carries patient data, so send it only under an executed agreement. Example request, its answer.

The product is an NDC (11 digits, no dashes) or an RxNorm code. A ZIP code is five digits, or ZIP+4.

What comes back

A message Bundle whose MessageHeader answers the request's MessageHeader (response.identifier is its id), with one ClaimResponse that carries either prices and coverage in item, or the reason there are none in error, never both, as the CARIN guide requires. The answer to a member's request echoes the request's Patient as it was sent.

When no connected source can answer, the ClaimResponse's error carries a code from Pharmacy Benefits Processing Code: no-responder-for-coverage when no insurer this service connects to answers for the coverage's payer, and no-price-source when no price source returned a price. Neither is a statement about whether a medication is covered or what it costs. An NCPDP reject code in an answer comes from the source that sent it.

A request the service cannot read at all, such as one missing an element the CARIN profiles require, is answered with an OperationOutcome and HTTP 400, naming the element. When the sources asked do not answer, the answer is an OperationOutcome and HTTP 503, coded source-unavailable.

Conformance

The examples here claim the CARIN ballot's profiles in meta.profile. This guide does not depend on the ballot, which builds on a newer US Core than this guide's, so the examples are checked against hl7.fhir.us.carin-rtpbc#2.0.0-ballot with the HL7 validator rather than by this guide's build.