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 Path | Description |
---|---|
patient | Reference to patient resource |
provider | Reference to provider resource |
insurance[0].coverage | Reference to insurance coverage |
servicedDate | Date when the healthcare service would be rendered |
item.category | Determines the eligibility benefits in response (default is 30) |
item.productOrService | Determines 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 Path | Description |
---|---|
name[0].family | Last name of patient |
name[0].given[0] | First name of patient |
name[0].given[1] | Middle name of patient |
birthDate | Dob of patient |
gender | Gender 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 Path | Description |
---|---|
name[0].family | Last name on insurance card |
name[0].given[0] | First name on insurance card |
name[0].given[1] | Middle name on insurance card |
birthDate | Dob of person on insurance card |
gender | Gender 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 Path | Description |
---|---|
identifier.value for identifier with type of value XX and code http://terminology.hl7.org/CodeSystem/v2-0203 | Insurance 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 Path | Description |
---|---|
identifier.value for identifier with type of value NPI and system http://terminology.hl7.org/CodeSystem/v2-0203 | NPI for provider who will be providing the care |
name[0].family | Last 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-taxonomy | Taxonomy 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-0203 | Tax 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].city | Address city for provider who will be providing the care |
address[0].state | Address state for provider who will be providing the care |
address[0].postalCode | Address 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 Path | Description |
---|---|
payor[0] | Reference to payer organization |
subscriberId | Subscriber's member ID |
relationship | Relationship 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).