Skip to main content

Insurance Eligibility Checks

Insurance eligibility checks determine whether a patient's insurance is active, in-network, and has applicable benefits. They ensure that the provider will ultimately get compensated by the patient's insurer for a specific product or service.

Use Cases

Insurance eligibility checks cover a variety of use cases, but generally they are used to answer three questions:

  1. Is this insurance active?
  2. Does this insurance cover basic visits to a provider?
  3. Does this insurance cover a specific service type?

The most basic use case for an eligibility check is simply seeing if the policy is active and in force.

Adding a second layer is checking if the policy is active and also covers basic visits to a provider. These include appointments like physicals and check-ups and is the most common type of eligibility request.

Because it is so common, these types of requests are defined by the X12 Service Type Codes in service code 30. This service type is "Plan Coverage and General Benefits", and checks for active basic coverage.

Two common use cases for this service type are:

  • Checking that a new patient's coverage is active and has general benefits.
  • Checking coverage directly prior to a visit to ensure that the policy has not changed and the patient is still covered.

Finally, checking that insurance covers a specific service type adds a third layer to an eligibility check. These are done to ensure that a patient is covered for more complex care. It is recommended to use the X12 Service Type Codes to illustrate the type of care that is being checked.

For example, if a patient needs to purchase durable medical equipment, you would use service code 12. This code represents "Durable Medical Equipment Purchased".

It is important to note that you should be checking the service type to be provided, not the specific service, which is exactly what the X12 Service Type Codes are designed to do.

Preparing an Eligibility Check

FHIR follows a request/response pattern for eligibility checks. This uses two resources: the CoverageEligibilityRequest to model the request to the insurer and the CoverageEligibilityResponse to model their response.

To complete an eligibility check, you will need the following information:

Creating a Request

FHIR provides the CoverageEligibilityRequest resource to model a request for an insurance eligibility check.

ElementDescriptionCode SystemExample
patientA reference to the Patient the request is for.Patient/homer-simpson
providerA reference to the Practitioner or Organization that will be providing the service. This is the party that is submitting the request, but is not necessarily the specific Practitioner who will be providing the service detailed within.Practitioner/dr-alice-smith
insurerA reference to the insurance Organization that is providing coverage and will be evaluating the request.Organization/blue-cross
purposeThe reason the request is being made. Must be one of the following:
  • auth-requirements: A check of prior authorization that is required for the specified product or service.
  • benefits: The benefits on the plan or the benefits consumed by the specified product or service.
  • discovery: A request for the insurer to report any coverages they are aware of in addition to the ones specified.
  • validation: A check that the specified coverages are in-force.
validation
insurance.coverageA reference to the Coverage resource that is being checked.Coverage/example-coverage
itemDetails about the items, services, or procedures for which eligibility is being checked.See below
statusThe status of the request.active
supportingInfoAdditional information about the request. This could include a patient's condition, more details about the situation, special considerations, or more.

The Item Being Checked for Coverage

As mentioned in the table above, the item element provides details about the eligibility being checked. This includes what procedure, product, or service is being provided as well as why it is being provided.

The item field also provides additional data about the procedure, product, or service.

PropertyDescriptionCode SystemExample
categoryThe general type of the service or product being checked for eligibility.X12 CodesVision Coverage
productOrServiceThe product, drug, service, etc. that is being provided.CPT Codes92340 - Fitting of eyeglasses
diagnosisThe diagnosis for which care is being sought.ICD-10 CodesCondition/reduced-vision
providerA reference to the Practitioner who is responsible for providing the service.Practitioner/dr-alice-smith
quantityThe number of repetitions of the service that will be performed.2
unitPriceThe price charged to the patient for a single unit of the service. This is the price that the provider charges for the service.$200
facilityA reference to the Location or Organization where the service will be provided.Organization/example-hospital
detailA reference to the CarePlan with details describing the service.CarePlan/improve-vision
Example: A coverage eligibility request for a consultation
  {
resourceType: 'CoverageEligibilityRequest',
id: 'coverage-validation-request',
status: 'active',
purpose: ['validation'],
created: '2021-01-01T00:00:00.000Z',
patient: {
reference: 'Patient/homer-simpson',
},
provider: {
reference: 'Practitioner/dr-alice-smith',
},
insurer: {
reference: 'Organization/blue-cross-blue-shield',
},
insurance: [
{
coverage: {
reference: 'Coverage/homer-simpson-coverage',
},
},
],
item: [
{
category: {
coding: [
{
system: 'https://x12.org/codes/service-type-codes',
code: '3',
display: 'Consultation',
},
],
},
productOrService: {
coding: [
{
system: 'http://www.ama-assn.org/go/cpt',
code: '80504',
display: 'Consultation for a moderately complex clinical problem',
},
],
},
},
],
};
Example: A plan coverage and general benefits check
  {
resourceType: 'CoverageEligibilityRequest',
id: 'general-benefits-check',
status: 'active',
purpose: ['benefits', 'discovery'],
created: '2021-01-01T00:00:00.000Z',
patient: {
reference: 'Patient/jane-doe',
},
provider: {
reference: 'Organization/example-hospital',
},
insurer: {
reference: 'Organization/kaiser-permanente',
},
insurance: [
{
coverage: {
reference: 'Coverage/jane-doe-coverage',
},
},
],
item: [
{
category: {
coding: [
{
system: 'https://x12.org/codes/service-type-codes',
code: '30',
display: 'Plan Coverage and General Benefits',
},
],
},
},
],
};

Sending an Eligibility Check Request

Once you have created your CoverageEligibilityRequest, you need to send it to the insurer.

In addition to sending it directly to the insurer, there are services that simplify the process. Companies such as Opkit, Availity, Change Healthcare, Waystar and Candid Health allow you to send them eligibility checks directly.

Unfortunately, these companies format their requests based on X12 EDI Format rather than FHIR, so you will need to convert your CoverageEligibilityRequest to the correct format. This is a good workflow to implement Bots to convert your request, interface with the company's API, and send the request. Additionally, you can have a Subscription to listen for a response and have a bot handle that as well.

Receiving a Response

When you send your request, the insurer will review it and respond. This response will be modeled as a CoverageEligibilityResponse.

ElementDescriptionExample
outcomeThe outcome of the processing of the request. Does NOT answer if the patient is eligible for coverage.complete
dispositionA human-readable description of the status of the request.The policy is currently in-force.
errorDocuments any errors that encountered during the eligibility check. Describes why a check may not have been able to be completed.Missing Identifier
insurance.itemDetails about the benefits, authorization requirements, and current benefits of the insurance.See below
insurance.inforceA boolean indicating if the coverage is in force for the requested period.true
insurance.benefitPeriodThe term period of the benefits documented in the response.2023-01-01 – 2023-12-31
insurance.coverageA reference to the patient's Coverage resource.Coverage/example-coverage
requestA reference to the original CoverageEligibilityRequest this is in response to.CoverageEligibilityRequest/check-for-vision-coverage
purposeThe reason the initial request was made. See the purpose field in the above table for the allowed valueset.validation
statusThe status of the response.active
insurerA reference to the Organization that is providing coverage and that sent the response.Organization/blue-cross
patientA reference to the Patient the response is for.Patient/homer-simpson

The Covered Items

Like its request counterpart, the CoverageEligibilityResponse also has an item element, however it is a property on the insurance element rather than directly on the resource (e.g. CoverageEligibilityResponse.insurance.item vs CoverageEligibilityRequest.item). The item property contains details about allowed products and services under the insurance policy.

This field has some overlap with the request resource, but there are also significant differences between the two.

PropertyDescriptionCode SystemExample
benefitA description of the benefits allowed and used to date under the coverage.allowedMoney: $10000, usedMoney: $645.99
descriptionA more detailed description of the benefits or services that are covered.Vision is covered in this policy.
authorizationRequiredA boolean indicating if authorization is required before providing service.true
authorizationSupportingDetails about additional information or material needed to get authorization.CoverageEligibilityResponse Auth Support CodesLab Report
excludedA boolean indicating if the service is excluded from the plan.false
networkIndicates whether the benefits apply to in-network or out-of-network providers.Network Type Codesin
unitIndicates whether the benefits apply to an individual or to a family.Unit Type Codesindividual
termThe term or duration during which service is covered.Benefit Term Codesannual
productOrServiceThe product, drug, service, etc. that is being provided.CPT Codes92340 - Fitting of eyeglasses
providerA reference to the Practitioner who is responsible for providing the service.Practitioner/dr-alice-smith
categoryThe general type of the service or product being checked for eligibility.Vision Coverage
Coordination of Benefits

FHIR makes the insurance field on both the request and response an array, allowing for coordination of benefits across multiple insurance policies.

When sending a request, if there are multiple insurances, the CoverageEligibilityRequest.insurance.focal field should be set to true on the specific coverage being checked.

The item field is also an array on the insurance element of a CoverageEligibilityResponse because it can represent multiple items that are covered under a specific insurance. When coordinating care among multiple policies, it can be common for multiple items from multiple coverages to be relevant to the check.

Example: A coverage eligibility response for a basic consultation
  {
resourceType: 'CoverageEligibilityResponse',
status: 'active',
purpose: ['validation'],
created: '2021-01-01T00:00:00.000Z',
patient: {
reference: 'Patient/homer-simpson',
},
request: {
reference: 'CoverageEligibilityRequest/coverage-validation-request',
},
outcome: 'complete',
disposition: 'Coverage is currently in-force',
insurer: {
reference: 'Organization/blue-cross-blue-shield',
},
insurance: [
{
coverage: {
reference: 'Coverage/homer-simpson-coverage',
},
inforce: true,
item: [
{
category: {
coding: [
{
system: 'https://x12.org/codes/service-type-codes',
code: '3',
display: 'Consultation',
},
],
},
network: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-network',
code: 'in',
},
],
},
unit: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-unit',
code: 'individual',
},
],
},
term: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-term',
code: 'annual',
},
],
},
benefit: [
{
type: {
coding: [
{
code: 'copay-maximum',
},
],
},
allowedMoney: {
value: 100,
currency: 'USD',
},
},
],
},
],
},
],
};
Example: A plan coverage and general benefits check response
  {
resourceType: 'CoverageEligibilityResponse',
status: 'active',
purpose: ['benefits', 'discovery'],
created: '2021-01-01T00:00:00.000Z',
patient: {
reference: 'Patient/jane-doe',
},
request: {
reference: 'CoverageEligibilityRequest/general-benefits-check',
},
outcome: 'complete',
disposition: 'Coverage is currently in-force',
insurer: {
reference: 'Organization/kaiser-permanente',
},
insurance: [
{
coverage: {
reference: 'Coverage/jane-doe-coverage',
},
inforce: true,
item: [
{
category: {
coding: [
{
system: 'https://x12.org/codes/service-type-codes',
code: '30',
display: 'Plan Coverage and General Benefits',
},
],
},
network: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-network',
code: 'in',
},
],
},
unit: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-unit',
code: 'family',
},
],
},
term: {
coding: [
{
system: 'http://terminology.hl7.org/CodeSystem/benefit-term',
code: 'lifetime',
},
],
},
benefit: [
{
type: {
coding: [
{
code: 'benefit',
},
],
},
allowedMoney: {
value: 100000,
currency: 'USD',
},
usedMoney: {
value: 1233.4,
currency: 'USD',
},
},
{
type: {
coding: [
{
code: 'copay-percent',
},
],
},
allowedUnsignedInt: 20,
},
],
},
],
},
],
};

See Also