LinuxForHealth / connect-clients

Client examples for LinuxForHealth and downstream services
Apache License 2.0
0 stars 0 forks source link

Blue Button client: Verification of FHIR R4 EOB data from Blue Button indicates 2 missing fields #23

Open ccorley opened 3 years ago

ccorley commented 3 years ago

When sending data to LinuxForHealth connect using the Blue Button client, verification of ExplanationOfBenefit data indicates 2 missing fields in each EOB instance in the Bundle returned from CMS Blue Button. The result is an HTTP 500 error and the following error is seen in the LFH connect trace log:

2021-11-01 19:12:07,976 - connect.workflows.core - TRACE - FhirWorkflow error: incoming error = 20 validation errors for Bundle
entry -> 0 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 0 -> resource -> provider
  field required (type=value_error.missing)
entry -> 1 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 1 -> resource -> provider
  field required (type=value_error.missing)
entry -> 2 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 2 -> resource -> provider
  field required (type=value_error.missing)
entry -> 3 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 3 -> resource -> provider
  field required (type=value_error.missing)
entry -> 4 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 4 -> resource -> provider
  field required (type=value_error.missing)
entry -> 5 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 5 -> resource -> provider
  field required (type=value_error.missing)
entry -> 6 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 6 -> resource -> provider
  field required (type=value_error.missing)
entry -> 7 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 7 -> resource -> provider
  field required (type=value_error.missing)
entry -> 8 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 8 -> resource -> provider
  field required (type=value_error.missing)
entry -> 9 -> resource -> insurance -> 0 -> __root__ -> focal
  field required (type=value_error.missing)
entry -> 9 -> resource -> provider
  field required (type=value_error.missing)
2021-11-01 19:12:08,043 - connect.clients.kafka - TRACE - Produced record to topic LFH_EXCEPTION partition [0] @ offset 4
ccorley commented 3 years ago

A PR was created here: https://github.com/CMSgov/beneficiary-fhir-data/issues/804 and was reported via the Blue Button dev google group: https://groups.google.com/g/Developer-group-for-cms-blue-button-api

ccorley commented 3 years ago

Excerpts from http://hl7.org/fhir/us/carin-bb/STU1.1/StructureDefinition-C4BB-ExplanationOfBenefit-Professional-NonClinician.profile.json.html that support the fact that ExplanationOfBenefit.provider and ExplanationOfBenefit.insurance.focal are required:

{
      "id" : "ExplanationOfBenefit.provider",
      "path" : "ExplanationOfBenefit.provider",
      "short" : "Party responsible for the claim",
      "definition" : "The provider which is responsible for the claim, predetermination or preauthorization.",
      "comment" : "The identifier assigned to the Billing Provider. (94)",
      "min" : 1,
      "max" : "1",
      "base" : {
        "path" : "ExplanationOfBenefit.provider",
        "min" : 1,
        "max" : "1"
      },
      "type" : [
        {
          "code" : "Reference",
          "targetProfile" : [
            "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Organization",
            "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Practitioner"
          ]
        }
      ],
      "constraint" : [
        {
          "key" : "ele-1",
          "severity" : "error",
          "human" : "All FHIR elements must have a @value or children",
          "expression" : "hasValue() or (children().count() > id.count())",
          "xpath" : "@value|f:*|h:div",
          "source" : "http://hl7.org/fhir/StructureDefinition/Element"
        }
      ],
      "mustSupport" : true,
      "isModifier" : false,
      "isSummary" : true,
      "mapping" : [
        {
          "identity" : "w5",
          "map" : "FiveWs.source"
        }
      ]
    },
    {
      "id" : "ExplanationOfBenefit.insurance.focal",
      "path" : "ExplanationOfBenefit.insurance.focal",
      "short" : "Coverage to be used for adjudication",
      "definition" : "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.",
      "comment" : "A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies. An invariant is defined to enforce the following rule:  Will have multiple occurrences on secondary / tertiary, etc. claims.  Up to one occurrence, that of the ExplanationOfBenefit.insurer, will have a boolean value = 'True'",
      "requirements" : "To identify which coverage in the list is being used to adjudicate this claim.",
      "min" : 1,
      "max" : "1",
      "base" : {
        "path" : "ExplanationOfBenefit.insurance.focal",
        "min" : 1,
        "max" : "1"
      },
      "type" : [
        {
          "code" : "boolean"
        }
      ],
      "constraint" : [
        {
          "key" : "ele-1",
          "severity" : "error",
          "human" : "All FHIR elements must have a @value or children",
          "expression" : "hasValue() or (children().count() > id.count())",
          "xpath" : "@value|f:*|h:div",
          "source" : "http://hl7.org/fhir/StructureDefinition/Element"
        }
      ],
      "mustSupport" : true,
      "isModifier" : false,
      "isSummary" : true
    },