Skip to main content

Representing Patient Insurance Coverage

Introduction

The Coverage resource represents high-level insurance information for a patient, similar to what would be found on their insurance cards.

This guide will go over the most relevant elements of Coverage for digital health providers and is primarily focused on the U.S. system.

The guide aligns with recommendations from two implementation guides

  • US Core Guidelines - these are guidelines developed by the U.S. government and serve as the basis for all FHIR implementations in the U.S.
  • CARIN Digital Insurance Card Guide - CARIN is a industry group, including members from Humana, Blue Cross, and Mitre, that expands upon the U.S. Core.

Subscribers vs. Beneficiaries

In FHIR's Coverage resource, a distinction is made between plan subscribers and beneficiaries.

The Coverage.subscriber element denotes the individual who has subscribed to the plan, often also known as the "policyholder".

The Coverage.beneficiary element, on the other hand, refers to the person who is eligible to receive healthcare services under the plan.

The Coverage.relationship element describes how the subscriber and beneficiary are related. The US Core guidelines recommend that this code should be selected from the HL7 subscriber relationship valueset.

Example

Consider an example where Mr. John Doe, an employee at a company, has an insurance policy that covers his family, including his daughter, Jane Doe. When representing Jane's insurance coverage, she would be listed as the Coverage.beneficiary, John would be listed as the Coverage.subscriber, and the Coverage.relationship would be set to 'child'.

Insurance Member ID

The US Core implementation of FHIR mandates every Coverage to have an insurance member ID for the subscriber. This identifier can be included in one of two elements: Coverage.subscriberId or Coverage.identifier.

If you decide to use Coverage.identifier, US Core requires that Coverage.identifier.type is drawn from the HL7 identifierType code system with code MB. Check out the example below for an example.

Plan Types and Payors

One of the most important fields in the Coverage resource is the plan type (Coverage.type). The United States offers many different types of insurance plans, including Health Maintenance Organizations (HMOs), Preferred Provider Organizations (PPOs), government employee programs, veteran's insurance, and many others. Each of these plan types has a distinct set of benefits and billing structures.

The US Core guidelines strongly encourage the use of the Source of Payment Typology (SOPT) code system for classifying US plan types. These SOPT codes are a hierarchical system of numeric codes that classify most US health plans.

Another required field is Coverage.payor , which indicates the company or institution who will reimburse the provider for care. This should a reference to an Organization resource, to allow for search queries of all patients insured by the same payor.

Representing self-pay / cash-pay

Many digital providers have a significant patient population that pay out-of-pocket. It is a best practice to create Coverage resources for these patients as well, to allow flexible handling of their coverage stack as their insurance situation evolves.

A self-pay patient's Coverage should set subscriber, beneficiary, relationship, type, and payor as follows:

{
resourceType: 'Coverage',
//...
type: {
text: 'Self-pay'
coding: [
{
system: 'https://nahdo.org/sopt',
code: '81',
display: 'Self-pay (Includes applicants for insurance and Medicaid applicants)',
},
],
},
subscriber: {
reference: 'Patient/example-patient',
},
beneficiary: {
reference: 'Patient/example-patient',
},
relationship: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/subscriber-relationship',
code: 'self',
display: 'Self'
},
],
},
payor: [
{
reference: 'Patient/example-patient',
},
],
//...
};

Plan Classifications: Group, Plan Name, RXBIN, RXPCN

Most insurance cards have a set of codes, known as "classifiers", that identify important billing information for the subscriber's plan.

The Coverage.class is used to store these classification values in an array of (type, value, name ) tuples.

FHIR recommends using the coverage class valueset to represent the class type. Below is a table of the coverage class codes in this valueset.

CodeDefinition
groupAn employee group
subgroupA sub-group of an employee group
planA specific suite of benefits.
subplanA subset of a specific suite of benefits.
classA class of benefits.
subclassA subset of a class of benefits.
sequenceA sequence number associated with a short-term continuance of the coverage.
rxbinPharmacy benefit manager's Business Identification Number.
rxpcnA Pharmacy Benefit Manager specified Processor Control Number.
rxidA Pharmacy Benefit Manager specified Member ID.
rxgroupA Pharmacy Benefit Manager specified Group number.

Refer to our example below for a Coverage resource that is tagged with multiple classifier codes.

Patient Costs and Copays

Healthcare in the U.S often involves cost-sharing measures with patients, commonly referred to as "copays" or "co-insurance". These measures represent the portion of healthcare costs that the patient is responsible for, separate from what the insurance covers.

In FHIR, these cost-sharing measures can be represented using the Coverage.costToBeneficiary field, which is an array of such cost-sharing provisions. The CARIN Digital Insurance Card guide (a superset of the US Core guidelines) recommends a set of standard codes for the costToBeneficiary.type field in the C4DIC Extended Copay Type value set. This value set provides a comprehensive list of codes to represent most common cost-sharing provisions in the U.S.

Representing Cost Sharing Measures as Text

In certain scenarios, cost-sharing provisions may not be easily representable as numeric or monetary values. The CARIN guide offers the Beneficiary Cost as String extension to represent these these provisions as text strings. It is then up to the client's billing engine to interpret this string when adjudicating claims for reimbursement. The rx provision in our example below below demonstrates how to use this extension.

See our detailed example below for a comprehensive example representation of these cost-sharing provisions.

Primary vs. Secondary Coverage

Some patients may have multiple forms of reimbursement, forming a "coverage stack" for any given procedure. For patients with multiple sources of insurance, FHIR uses the Coverage.order element to represent the order of use of the patient's coverages. The order attribute is an integer, with the primary insurance given the value of 1, secondary insurance a value of 2, and so forth.

It's crucial to correctly assign these numbers as they indicate to the billing system the sequence in which the coverages are to be applied.

A note on Co-pay cards

Some manufacturers will offer co-pay cards to reimburse patients for their out-of-pocket costs for certain drugs. These cards can be modeled as additional Coverage resources, with higher / lower priority on the coverage stack, as appropriate.

To date, the community has not yet aligned on a standard for modeling patient reimbursements (rather than costs). Medplum is working with the FHIR community to define a standard, and currently recommends using a negative value for Coverage.costToBeneficiary.value[x].

Storing Insurance Card Photos

Digital health implementations often need to store photos of a patient's insurance card, alongside their coverage information. While FHIR does not support the direct storing of images within the Coverage resource, you can use the DocumentReference resource to store the image and connect it to the Coverage using the DocumentReference.context.related element. See our guide on handling external files for more information.

A Detailed Example

Below is a detailed example of a Coverage resource, tagged with the appropriate code systems. This example conforms to the US Core guidelines.

This example has been tested as part of the the Medplum Candid Demo Bot, a Medplum Bot that submits insurance information to Candid Health for reimbursement. Check out the full bot for an example of how to submit FHIR resources to the Candid API.

      {
resourceType: 'Coverage',

// Member id
identifier: [
{
type: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/v2-0203',
code: 'MB',
display: 'Member Number',
},
],
},
system: 'https://www.acmeinsurance.com/glossary/memberid',
value: '102345672-01',
assigner: {
display: 'Acme Insurance Co',
},
},
],
subscriberId: '102345672-01',
status: 'active',

// Plan type
type: {
coding: [
{
system: 'https://nahdo.org/sopt',
code: '512',
display: 'Commercial Managed Care - PPO',
},
{
system: 'http://terminology.hl7.org/CodeSystem/v3-ActCode',
code: 'PPO',
display: 'preferred provider organization policy',
},
],
text: 'health insurance plan policy',
},

// Subscriber & Beneficiary
subscriber: createReference(patient),
beneficiary: createReference(patient),
relationship: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/subscriber-relationship',
code: 'self',
display: 'Self',
},
],
},
period: {
start: '2021-01-01',
},

// Payor
payor: [
{
display: 'Acme Insurance Co',
},
],
// Classification Codes
class: [
{
type: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/coverage-class',
code: 'group',
},
],
},
value: '993355',
name: 'Stars Inc',
},
{
type: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/coverage-class',
code: 'plan',
},
],
},
value: '11461128',
name: 'Acme Gold Plus',
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCoverageClassCS',
code: 'division',
},
],
},
value: '11',
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCoverageClassCS',
code: 'network',
},
],
},
value: '561490',
name: 'Acme Gold Plus South',
},
{
type: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/coverage-class',
code: 'rxbin',
},
],
},
value: '100045',
},
{
type: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/coverage-class',
code: 'rxpcn',
},
],
},
value: '1234000',
},
],

// Cost Sharing Provisions
costToBeneficiary: [
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamOutDed',
display: 'Family Out of Network Deductible',
},
],
},
valueMoney: {
value: 10000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamInDed',
display: 'Family In Network Deductible',
},
],
},
valueMoney: {
value: 8000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamRxOutDed',
display: 'Family Pharmacy Out of Network Deductible',
},
],
},
valueMoney: {
value: 2000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamRxInDed',
display: 'Family Pharmacy In Network Deductible',
},
],
},
valueMoney: {
value: 1500,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamOutMax',
display: 'Family Out of Network Out of Pocket Maximum',
},
],
},
valueMoney: {
value: 12000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamInMax',
display: 'Family In Network Out of Pocket Maximum',
},
],
},
valueMoney: {
value: 10000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamRxOutMax',
display: 'Family Pharmacy Out of Network Out of Pocket Maximum',
},
],
},
valueMoney: {
value: 3000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'FamRxInMax',
display: 'Family Pharmacy In Network Out of Pocket Maximum',
},
],
},
valueMoney: {
value: 2000,
currency: 'USD',
},
},
{
type: {
coding: [
{
system: 'http://hl7.org/fhir/us/insurance-card/CodeSystem/C4DICExtendedCopayTypeCS',
code: 'rx',
},
],
},
valueMoney: {
extension: [
{
url: 'http://hl7.org/fhir/us/insurance-card/StructureDefinition/C4DIC-BeneficiaryCostString-extension',
valueString: 'DED THEN $10/$40/$70/25%',
},
],
},
},
],
}

See Also