🚧
The RCM Service is currently in beta.

Eligibility

Oystehr provides realtime insurance eligibility checks. Submit a patient's insurance information and receive a response detailing the patient's coverage and benefits.

Making an Eligibility Check Request

You can perform an eligibility check with either the Typescript SDK or the API:

Perform an eligibility check with the v3 SDK:

import Oystehr from '@oystehr/sdk';
 
const oystehr = new Oystehr({
  accessToken: "<your_access_token>",
});
 
const result = await oystehr.rcm.eligibilityCheck({
  eligibilityRequestId: "7cb4321f-8d52-4d27-93ba-f20c86cbceaf",
})

The UUID value for eligibilityRequestId provides a reference to a specific FHIR CoverageEligibilityRequest resource. All values that will be used in the eligibility check will be pulled from this resource and other FHIR resources that it references. See the eligibility FHIR property charts below for additional details.

There are five entities at play in an eligibility request:

  • Patient: person receiving care
  • Subscriber: person the insurance policy is under
  • Coverage: information about the insurance policy
  • Provider: practitioner expected to perform the care
  • Payer: insurer

note: in some cases, the patient and subscriber may be the same person

Access Policy

To place an eligibility check, your user needs to have the following access policy:

{
  "rule": [
    {
      "action": "RCM:InsuranceEligibility",
      "resource": "RCM:CheckInsuranceEligibility",
    },
  ],
}

Eligibility Response

The eligibility response will come in the form of a FHIR CoverageEligibilityResponse.

Benefits

The key information used to understand whether a Patient has active coverage of the appropriate type for the services you're providing is found in CoverageEligibilityResponse.insurance.item (opens in a new tab). This property holds an array of benefits provided by the payer. These benefits are coded following the X12 service type codes (opens in a new tab) standard.

Examples of CoverageEligibilityResponse.insurance.item (opens in a new tab):

These two examples show a benefit with a service type code of 30. This code is defined in the coding standard (opens in a new tab) as:

Plan coverage and general benefits for the member's policy or contract.

For many use cases, 30 is the only code you are looking for to determine whether the patient is covered for your services.

Deductible
{
    "category": {
        "coding": [
            {
                "code": "30",
                "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit"
            }
        ],
        "text": "Health Benefit Plan Coverage"
    },
    "unit": {
        "coding": [
            {
                "code": "FAM",
                "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-level"
            }
        ],
        "text": "Family"
    },
    "term": {
        "coding": [
            {
                "code": "24",
                "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-period"
            }
        ],
        "text": "Year to Date"
    },
    "network": {
        "coding": [
            {
                "code": "W",
                "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-inplan-network"
            }
        ]
    },
    "benefit": [
        {
            "type": {
                "coding": [
                    {
                        "code": "C",
                        "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-coverage"
                    }
                ],
                "text": "Deductible"
            },
            "allowedString": "0"
        }
    ]
}
Out of Pocket Maximum
{
      "category": {
          "coding": [
              {
                  "code": "30",
                  "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit"
              }
          ],
          "text": "Health Benefit Plan Coverage"
      },
      "unit": {
          "coding": [
              {
                  "code": "FAM",
                  "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-level"
              }
          ],
          "text": "Family"
      },
      "term": {
          "coding": [
              {
                  "code": "24",
                  "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-period"
              }
          ],
          "text": "Year to Date"
      },
      "network": {
          "coding": [
              {
                  "code": "W",
                  "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-inplan-network"
              }
          ]
      },
      "benefit": [
          {
              "type": {
                  "coding": [
                      {
                          "code": "G",
                          "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-benefit-coverage"
                      }
                  ],
                  "text": "Out of Pocket (Stop Loss)"
              },
              "allowedString": "0"
          }
      ],
      "extension": [
          {
              "url": "https://extensions.fhir.oystehr.com/eligibility-insurance-type",
              "valueCodeableConcept": {
                  "coding": [
                      {
                          "code": "C1",
                          "system": "https://terminology.fhir.oystehr.com/CodeSystem/eligibility-insurance-type"
                      }
                  ],
                  "text": "Commercial"
              }
          }
      ]
}

Errors

Errors returned by the clearinghouse or payer will be listed in CoverageEligibilityResponse.error. The three examples below show some possible errors that can be returned, but please note that error codes and messages can be payer specific.

Invalid procedure code
[
    {
        "code": {
            "coding": [
                {
                    "code": "PRC1",
                    "system": "https://terminology.fhir.oystehr.com/CodeSystem/error"
                }
            ],
            "text": "Invalid procedure code [9921325]"
        }
    }
]
Payer does not support real time eligibility
[
    {
        "code": {
            "coding": [
                {
                    "code": "410",
                    "system": "https://terminology.fhir.oystehr.com/CodeSystem/error"
                }
            ],
            "text": "Payer ID [13162] does not support real-time eligibility."
        }
    }
]
Invalid/missing patient information
[
    {
        "code": {
            "coding": [
                {
                    "code": "64",
                    "system": "https://terminology.fhir.oystehr.com/CodeSystem/error"
                }
            ],
            "text": "Invalid/Missing Patient ID"
        }
    },
    {
        "code": {
            "coding": [
                {
                    "code": "65",
                    "system": "https://terminology.fhir.oystehr.com/CodeSystem/error"
                }
            ],
            "text": "Invalid/Missing Patient Name"
        }
    },
    {
        "code": {
            "coding": [
                {
                    "code": "71",
                    "system": "https://terminology.fhir.oystehr.com/CodeSystem/error"
                }
            ],
            "text": "Patient Birth Date Does Not Match That for the\tPatient on the Database"
        }
    }
]

FHIR Resources

Before placing the eligibility check request, ensure that these FHIR resources are created and up to date.

Eligibility Request (CoverageEligibilityRequest)

The CoverageEligibilityRequest resource will be referenced in the eligibility check request, and this resource will in turn reference other FHIR resources.

JSON PathDescription
patientReference to patient resource
providerReference to provider resource
insurance[0].coverageReference to insurance coverage
servicedDateDate when the healthcare service would be rendered
item.categoryDetermines the eligibility benefits in response (default is 30)
item.productOrServiceDetermines the eligibility for a particular procedure
{
  "id": "92755430-5ea0-4927-a74d-5e3425efd9b4",
  "resourceType": "CoverageEligibilityRequest",
  "status": "active",
  "purpose": [
    "benefits"
  ],
  "created": "2024-06-13",
  "patient": {
    "reference": "Patient/a5841e0d-8270-49ff-87e0-96520c283639"
  },
  "insurer": {
    "reference": "Organization/0d03d037-af76-4813-b228-105336238317"
  },
  "provider": {
    "reference": "Organization/bea1bda2-e069-4f91-ac50-be5c8f1337b2"
  },
  "insurance": [
    {
      "coverage": {
        "reference": "Coverage/755a526a-0c78-4731-bac2-d6209fc30f36"
      }
    }
  ],
  "item": [
    {
      "category": {
        "coding": [
          {
            "system": "http://terminology.oystehr.com/CodeSystem/benefit-category",
            "code": "30",
          },
        ],
      },
      {
        "productOrService": {
          "coding": [
            {
              "system": "http://terminology.oystehr.com/CodeSystem/product-code",
              "code": "99213"
            }
          ]
        }
      }
    },
  ],
  "meta": {
    "versionId": "6dbae679-6800-4ee9-8726-c34a60ca34ef",
    "lastUpdated": "2024-07-18T13:21:53.649Z"
  }
}

Patient (Patient)

JSON PathDescription
name[0].familyLast name of patient
name[0].given[0]First name of patient
name[0].given[1]Middle name of patient
birthDateDob of patient
genderGender of patient
{
  "id": "a5841e0d-8270-49ff-87e0-96520c283639",
  "meta": {
    "versionId": "27ea83d9-adc4-441f-ba7c-43b32eb25a92",
    "lastUpdated": "2024-07-01T17:00:46.690Z"
  },
  "name": [
    {
      "given": [
        "PETER"
      ],
      "family": "GRIFFIN"
    }
  ],
  "gender": "female",
  "address": [
    {
      "city": "QUAHOG",
      "line": [
        "31 SPOONER ST"
      ],
      "state": "RI",
      "postalCode": "11738"
    }
  ],
  "birthDate": "2022-05-14",
  "resourceType": "Patient"
}

Subscriber (Patient | RelatedPerson)

JSON PathDescription
name[0].familyLast name on insurance card
name[0].given[0]First name on insurance card
name[0].given[1]Middle name on insurance card
birthDateDob of person on insurance card
genderGender of person on insurance card
{
  "id": "a5841e0d-8270-49ff-87e0-96520c283639",
  "meta": {
    "versionId": "27ea83d9-adc4-441f-ba7c-43b32eb25a92",
    "lastUpdated": "2024-07-01T17:00:46.690Z"
  },
  "name": [
    {
      "given": [
        "PETER"
      ],
      "family": "GRIFFIN"
    }
  ],
  "gender": "female",
  "address": [
    {
      "city": "QUAHOG",
      "line": [
        "31 SPOONER ST"
      ],
      "state": "RI",
      "postalCode": "11738"
    }
  ],
  "birthDate": "2022-05-14",
  "resourceType": "Patient"
}

Payer (Organization)

JSON PathDescription
identifier.value for identifier with type of value XX and code http://terminology.hl7.org/CodeSystem/v2-0203Insurance company identifier (Payer ID)
{
  "resourceType": "Organization",
  "identifier": [
    {
      "type": {
        "coding": [
          {
            "code": "XX",
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
          }
        ]
      },
      "value": "00803"
    }
  ],
  "name": "NY BCBS - EMPIRE",
  "id": "0d03d037-af76-4813-b228-105336238317",
  "meta": {
    "versionId": "cd116228-fcea-427e-9634-ddc6f8a77d6d",
    "lastUpdated": "2024-07-01T17:01:17.424Z"
  }
}

Provider (Practitioner | PractitionerRole | Organization)

JSON PathDescription
identifier.value for identifier with type of value NPI and system http://terminology.hl7.org/CodeSystem/v2-0203NPI for provider who will be providing the care
name[0].familyLast name for provider who will be providing the care
name[0].given[0]First name for provider who will be providing the care
identifier.value for identifier with system http://nucc.org/provider-taxonomyTaxonomy for provider who will be providing the care
identifier.value for identifier with code ('SS' or 'NE') and system http://terminology.hl7.org/CodeSystem/v2-0203Tax ID for provider who will be providing the care
'S' if identifier.value exists for identifier with code 'SS' and system http://terminology.hl7.org/CodeSystem/v2-0203 otherwise 'E'Tax ID type for provider who will be providing the care
address[0].line[0]Address line 1 for provider who will be providing the care
address[0].cityAddress city for provider who will be providing the care
address[0].stateAddress state for provider who will be providing the care
address[0].postalCodeAddress postal code for provider who will be providing the care
{
  "id": "bea1bda2-e069-4f91-ac50-be5c8f1337b2",
  "resourceType": "Organization",
  "name": "New York Care",
  "identifier": [
    {
      "type": {
        "coding": [
          {
            "code": "NPI",
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
          }
        ]
      },
      "system": "http://hl7.org/fhir/sid/us-npi",
      "value": "1790914042"
    },
    {
      "type": {
        "coding": [
          {
            "code": "NE",
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203"
          }
        ]
      },
      "value": "270309905"
    }
  ],
  "address": [
    {
      "line": [
        "16 SOME STR"
      ],
      "city": "NEW YORK",
      "state": "NY",
      "postalCode": "10087"
    }
  ],
  "telecom": [
    {
      "system": "phone",
      "value": "5168690650"
    }
  ],
  "meta": {
    "versionId": "01a7b180-7cb2-44a9-9f5e-e621440a167d",
    "lastUpdated": "2024-07-18T13:25:38.705Z"
  }
}
🚧

In the case of placing an eligibility check against a provider group, rather than an individual, use the last name field for the provider group name.

Insurance Policy Information (Coverage)

JSON PathDescription
payor[0]Reference to payer organization
subscriberIdSubscriber's member ID
relationshipRelationship of patient to the person on insurance card (self
{
  "resourceType": "Coverage",
  "beneficiary": {
    "reference": "Patient/a5841e0d-8270-49ff-87e0-96520c283639"
  },
  "payor": [
    {
      "reference": "Organization/0d03d037-af76-4813-b228-105336238317"
    }
  ],
  "status": "active",
  "subscriber": {
    "reference": "Patient/a5841e0d-8270-49ff-87e0-96520c283639"
  },
  "relationship": {
    "coding": [
      {
        "code": "self",
        "system": "http://terminology.hl7.org/CodeSystem/subscriber-relationship"
      }
    ]
  },
  "subscriberId": "8912341595",
  "id": "755a526a-0c78-4731-bac2-d6209fc30f36",
  "meta": {
    "versionId": "9999f14f-8d24-437a-8cbd-44ab8c34e7bd",
    "lastUpdated": "2024-07-01T17:02:58.689Z"
  }
}

Minimum Required Fields

While providing more data is advised for maximizing the accuracy of the eligibility response a payer can provide, there is a minimum set of fields that are required in order to receive a successful response:

  • Subscriber's first name
  • Subscriber's last name
  • Subscriber's member ID
  • Patient's first name
  • Patient's last name
  • Patient date of birth
  • Payer ID
  • Patient relationship to subscriber
  • Service date
  • Provider NPI

Note that some payers may require fields that are not in this list, consult your agreement with specific payers for more information. These are some common additional fields that payers may require:

  • Subscriber's date of birth
  • Relationship code

Sandbox

The response to an eligibility check in a sandbox Oystehr project will be a pre-defined response that will not change based on information that is sent to it. When you're ready to begin production usage, reach out to our team at [email protected].

Clearinghouse Enrollment

Provider Enrollment

The first step in clearinghouse enrollment is loading in your practice's provider information. During onboarding, provide our team with a list of your individual/group providers with this information:

  • NPI
  • Tax ID
  • EIN/SSN

EDI Enrollment

EDI is the Electronic Data Interchange system which allows transaction of HIPAA standard formats from provider, to clearinghouse, to payer. Eligibility, claims, and ERAs are all examples of EDI. In most cases, eligibility enrollment is fast and automatic, but in some cases there will be paperwork for your team to fill out. Provide a list of the following payer information to our team to begin EDI enrollment:

  • Payer name
  • Insurance eligibility payer ID

Additional Resources

🚧

The RCM Service does not yet support FHIR R5 (opens in a new tab).