Configuring an HL7 FHIR Server for Financial Processing

One cannot send a X12-5010-270 EligibilityRequest, transform it to the FHIR CoverageEligibilityRequest Resource and POST it to the FHIR API unless all the Resources exist for all the Identifiers used to confirm eligibility.

In order for you to understand why, you need to understand what comprises the FHIR CoverageEligibilityRequest Resource.

JSON CoverageEligibilityRequest Resource Template

{
  "resourceType" : "CoverageEligibilityRequest",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Business Identifier for coverage eligiblity request
  "status" : "", // R!  active | cancelled | draft | entered-in-error
  "priority" : { CodeableConcept }, // Desired processing priority
  "purpose" : [""], // R!  auth-requirements | benefits | discovery | validation
  "patient" : { Reference(Patient) }, // R!  Intended recipient of products and services
  // serviced[x]: Estimated date or dates of service. One of these 2:
  "servicedDate" : "",
  "servicedPeriod" : { Period },
  "created" : "", // R!  Creation date
  "enterer" : { Reference(Practitioner|PractitionerRole) }, // Author
  "provider" : { Reference(Practitioner|PractitionerRole|Organization) }, // Party responsible for the request
  "insurer" : { Reference(Organization) }, // R!  Coverage issuer
  "facility" : { Reference(Location) }, // Servicing facility
  "supportingInfo" : [{ // Supporting information
    "sequence" : "", // R!  Information instance identifier
    "information" : { Reference(Any) }, // R!  Data to be provided
    "appliesToAll" :  // Applies to all items
  }],
  "insurance" : [{ // Patient insurance information
    "focal" : , // Applicable coverage
    "coverage" : { Reference(Coverage) }, // R!  Insurance information
    "businessArrangement" : "" // Additional provider contract number
  }],
  "item" : [{ // Item to be evaluated for eligibiity
    "supportingInfoSequence" : [""], // Applicable exception or supporting information
    "category" : { CodeableConcept }, // Benefit classification
    "productOrService" : { CodeableConcept }, // Billing, service, product, or drug code
    "modifier" : [{ CodeableConcept }], // Product or service billing modifiers
    "provider" : { Reference(Practitioner|PractitionerRole) }, // Perfoming practitioner
    "quantity" : { Quantity(SimpleQuantity) }, // Count of products or services
    "unitPrice" : { Money }, // Fee, charge or cost per item
    "facility" : { Reference(Location|Organization) }, // Servicing facility
    "diagnosis" : [{ // Applicable diagnosis
      // diagnosis[x]: Nature of illness or problem. One of these 2:
      "diagnosisCodeableConcept" : { CodeableConcept }
      "diagnosisReference" : { Reference(Condition) }
    }],
    "detail" : [{ Reference(Any) }] // Product or service details
  }]
}

Look at the nodes that have a Reference value

For example; Reference(Coverage) is a FHIR Coverage Resource which is the Insurance information and is required.

In other words the value for that node is contained in the Coverage Resource

JSON Coverage Resource Template

{
  "resourceType" : "Coverage",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Business Identifier for the coverage
  "status" : "", // R!  active | cancelled | draft | entered-in-error
  "type" : { CodeableConcept }, // Coverage category such as medical or accident
  "policyHolder" : { Reference(Patient|RelatedPerson|Organization) }, // Owner of the policy
  "subscriber" : { Reference(Patient|RelatedPerson) }, // Subscriber to the policy
  "subscriberId" : "", // ID assigned to the subscriber
  "beneficiary" : { Reference(Patient) }, // R!  Plan beneficiary
  "dependent" : "", // Dependent number
  "relationship" : { CodeableConcept }, // Beneficiary relationship to the subscriber
  "period" : { Period }, // Coverage start and end dates
  "payor" : [{ Reference(Organization|Patient|RelatedPerson) }], // R!  Issuer of the policy
  "class" : [{ // Additional coverage classifications
    "type" : { CodeableConcept }, // R!  Type of class such as 'group' or 'plan'
    "value" : "", // R!  Value associated with the type
    "name" : "" // Human readable description of the type and value
  }],
  "order" : "", // Relative order of the coverage
  "network" : "", // Insurer network
  "costToBeneficiary" : [{ // Patient payments for services/products
    "type" : { CodeableConcept }, // Cost category
    // value[x]: The amount or percentage due from the beneficiary. One of these 2:
    "valueQuantity" : { Quantity(SimpleQuantity) },
    "valueMoney" : { Money },
    "exception" : [{ // Exceptions for patient payments
      "type" : { CodeableConcept }, // R!  Exception category
      "period" : { Period } // The effective period of the exception
    }]
  }],
  "subrogation" : , // Reimbursement to insurer
  "contract" : [{ Reference(Contract) }] // Contract details
}

As you can see in the above template, there are a few References. The status node is the required and is a code data type. The code values are active | cancelled | draft | entered-in-error

The beneficiary node is required. The party who benefits from the insurance coverage; the patient when products and/or services are provided. This is the Patient.

Now let\’s look at Identifiers.

INFO:
Identifier is a
Data Type**
A numeric or alphanumeric string that is associated with a single object or entity within a given system. Typically, identifiers are used to connect content in resources to external content available in other frameworks or protocols. Identifiers are associated with objects and may be changed or retired due to human or system process and errors.

The following XML example shows several identifiers.

 <CoverageEligibilityRequest xmlns="http://hl7.org/fhir">
      <id value="52346"></id>
      <text>
        <status value="generated"></status>
        <div xmlns="http://www.w3.org/1999/xhtml">A human-readable,,,,,,,,,st </div>
      </text>
      <identifier>
           <system value="http://happyvalley.com/coverageelegibilityrequest"></system>
          <value value="52346"></value>
      </identifier>
      <status value="active"></status>
      <priority>
          <coding>
          </coding>
      </priority>
      <purpose value="validation"></purpose>
      <purpose value="benefits"></purpose>
      <patient>
         <reference value="Patient/pat1"></reference>
      </patient>
        <servicedDate value="2014-09-17"></servicedDate>  <!--   Anticipated service date   -->
        <created value="2014-08-16"></created>
      <enterer>
        <identifier>
          <system value="http://happyvalleyclinic.com/staff"></system>
          <value value="14"></value>
        </identifier>
      </enterer>
      <provider>
        <reference value="Organization/1"></reference>
      </provider>
      <insurer>
        <reference value="Organization/2"></reference>
      </insurer>
      <facility>
        <identifier>
          <system value="http://statecliniclicensor.com/clinicid"></system>
          <value value="G35B9"></value>
        </identifier>
      </facility>
      <insurance>
        <coverage>
          <reference value="Coverage/9876B1"></reference> 
        </coverage>
        <businessArrangement value="NB8742"></businessArrangement>
      </insurance>
      <item>
        <category>
          <coding>
            <system value="http://terminology.hl7.org/CodeSystem/ex-benefitcategory"></system>
            <display value="Maternity"></display>
          </coding>
        </category>
      </item>
    </CoverageEligibilityRequest>

These are contained within referencevalue=”Coverage/9876B1″

Coverage is the referenced resource and is used to prefix the unique identifier, which in this case is 987681

IMPORTANT There must be a Coverage Resource with an id of 987681 in the FHIR Repository. If it does not exist you will receive an error response.

If you POST an CoverageEligibilityRequest that has a reference value with identifier and one of the resources does not exist you will get an error.

If you are mandated to provide Interoperability, you will need to migrate you all your current data (last five years) to FHIR Resources. Eventually you will need to migrate all you data.

This is a massive undertaking. You need to create Resources from the bottom up. There is a minimum of sixteen resources alone for the CoverageEligibilityRequest. And they must be created in a specific order.

If you are lucky enough to be using BizTalk 2020 for your X12-5010 financial processing, your data migration can be orchestrated Before attempting to actually doing it, you will need to understand the how and why for resources. You will also need to know the data types. What you do not have is the codes, which are different than the HIPAA messages you are processing. You will need to learn how to work with SNOWMED CT

In order to achieve Interoperability you will need to understand the Principles of Health Interoperability written by Tim Benson and Grahame Grieve

Last modified: March 26, 2020

Author

Comments

Leave a Reply