FHIR Chat · Must have data element missing in source system · argonaut

Stream: argonaut

Topic: Must have data element missing in source system


view this post on Zulip SSM (Aug 03 2020 at 15:49):

Hi, if any of mandatory where card is 1* or must have data element is missing as defined by IG, then what shall we display in response in facade FHIR. There may be data issue in source system where in response some data may not be available for mandatory or must have elements. Since we are having a FHIR facade layer without a fhir repository and the responses are real time from source system directly to the requester so in that case, can we errored out the entire response because for one data element the data is not available/bad or we need to restrict that particular data element is some way and show the rest of the response. Plz suggest.

view this post on Zulip Eric Haas (Aug 03 2020 at 15:57):

Read the section on Missing data

view this post on Zulip SSM (Aug 05 2020 at 15:26):

Thanks @Eric Haas . But this concept can we also use in other IGs such as CARIN or DaVinci or this is only applicable for USCORE IG?

view this post on Zulip Brett Marquard (Aug 05 2020 at 15:28):

unless they prohibit you should be able to.

view this post on Zulip Lloyd McKenzie (Aug 05 2020 at 22:22):

Different IGs may set tighter expectations. Da Vinci sets tighter expectations on profiles it defines, but follows US Core rules where we use US Core. (The challenge with the US Core rules is that it allows implementers to omit anything - which means sharing data that can't be safely interpreted/used at all. With most Da Vinci profiles, if a minOccurs = 1, data absent reason can only be used if it's explicitly contemplated (i.e. those places where we think it's reasonable to omit the element)

view this post on Zulip Brett Marquard (Aug 06 2020 at 19:23):

safely interpreted? US Core target use case is much broader -- and we wanted to give some flexibility for the messiness of real-world data

view this post on Zulip Eric Haas (Aug 06 2020 at 19:24):

(deleted)

view this post on Zulip Lloyd McKenzie (Aug 06 2020 at 21:43):

Things like an Observation where the code is a DAR isn't terribly useful. You may well have data in your system that looks like that, but exposing it via your interface doesn't accomplish much.

view this post on Zulip Lloyd McKenzie (Aug 06 2020 at 21:44):

Same thing for no 'subject'

view this post on Zulip Lloyd McKenzie (Aug 06 2020 at 21:45):

There are places where allowing systems to omit data can't help but break other systems - and it's better to just not expose those records that can't be usefully used in the first place.

view this post on Zulip Eric Haas (Aug 06 2020 at 21:48):

So Far actual implementers have not commented on this.

view this post on Zulip Eric Haas (Aug 06 2020 at 21:49):

and has been around since Argonaut data query

view this post on Zulip Eric Haas (Aug 06 2020 at 21:50):

I consider it a moot point for now.

view this post on Zulip Lloyd McKenzie (Aug 06 2020 at 21:53):

Probably because no-one has tried to stretch the spec as far as it's allowed to go. I'm pretty sure that if you tested systems sticking DAR everywhere it's technically allowed by US Core, a lot of apps would blow up.

view this post on Zulip Michele Mottini (Aug 06 2020 at 22:03):

Apps have to be pretty tolerant - stuff that comes back from production servers can be ... how can I put it? surprising?

view this post on Zulip Robert Scanlon (Aug 06 2020 at 22:10):

The required RESTful search parameters cull out the most problematic elements for DAR (you always are querying by subject, and for observations you are almost always querying by code). Though those may be a problem when transmitted over something like the bulk data interface.

view this post on Zulip Lloyd McKenzie (Aug 06 2020 at 22:28):

The key question is why would we allow a resource to come back without the essential elements that allow you to use it? There's no requirement to share garbage data. If we can come up with scenarios where omitting the element would still allow utility, it shouldn't be 1..x. If there are no such cases, we shouldn't allow DAR. DAR is really only useful for those situations where "if you're not going to give me the data, I have a business need to know why". I.e. It's not about a get-out-of-jail-free card for the sender, it's to provide relevant & needed information to the recipient. If something is important and should almost always be there, but there are legitimate reasons why it might occasionally be absent and if it's absent, the record is still at least somewhat useful, the element should be 0..x, mustSupport=true.

view this post on Zulip Brett Marquard (Aug 07 2020 at 02:31):

If you have a clear definition of 'the elements that allow you to use it' then maybe that should be in base FHIR?

view this post on Zulip Brett Marquard (Aug 07 2020 at 02:33):

Our goal is not to bake in a 'get out of jail free', it's to allow systems to return the best they got. Hopefully over time the consumer (client) will start reporting back poor data and it can improve over time. Thanks @Michele Mottini for your real-world response, sadly, I am not surprised.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 03:06):

"elements that allow you to use it" are context-specific. So it needs to be set by IGs. But setting min=1, but then saying "but anyone's free to ignore that if they've got bad data" doesn't seem like it's going to produce interoperable solutions to me.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 03:14):

Some specific examples:

  • AllergyIntolerance.code - how is it useful to capture an AllergyIntolerance but not say what they're allergic to? (There's lots of uses for AllergyIntolerance that wouldn't query by code.)
  • Condition.code - same issue
  • DocumentReference.content - What's the point of metadata that doesn't point to or contain the content?
  • everything.subject - Though it's true you'll almost always search by Patient, the reality is that it's not true that you can put a DAR on subject - so why do we say that you can?

view this post on Zulip Brett Marquard (Aug 07 2020 at 03:23):

I think we have different goals. I want to share the good, bad, ugly so we can make it better. Not lock it away to never see the light if day....

view this post on Zulip Brett Marquard (Aug 07 2020 at 03:24):

I also firmly believe vendors are doing their best. They don't want to share crapola either.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 03:50):

I'm not suggesting in any way that vendors aren't doing their best. If the data is missing key elements, I'm not sure how exposing information that clients can't use provides opportunities to make it better. I just think it creates complexity for clients - by meaning that they can't count on anything and have to treat bad data as 'valid'.

view this post on Zulip Richard Townley-O'Neill (Aug 07 2020 at 04:23):

A pair of profiles:
Sender-friendly: send whatever you have
Reader-friendly: send something I can use

view this post on Zulip John Moehrke (Aug 07 2020 at 12:10):

Brett Marquard said:

Our goal is not to bake in a 'get out of jail free', it's to allow systems to return the best they got. Hopefully over time the consumer (client) will start reporting back poor data and it can improve over time. Thanks Michele Mottini for your real-world response, sadly, I am not surprised.

The realworld will always be messy beyond what any profile has said. The profile should not throw up their hands and stoop to the depth of these bad systems / data. The profile should set a realistic bar of appropriate data quality. Apps better be written to be more robust than the profile defines, the world of bad data is well beyond what you could possibly explain. DAR will be ignored by most apps, they will see the data element they want is missing and discard that resource and move to the next. DAR is not helpful to most applications, only a few will handle it, and they have few use-cases.

view this post on Zulip John Moehrke (Aug 07 2020 at 12:14):

in the last two weeks my developers have encountered three different instances of garbage data from a FHIR api. the app that wrote it simply had a very different view of the world, they were not following us-core, they were ignorant of it.. to a human looking at the json, it was clear what they were recording, but not any pattern published in a profile. .. but the point is that it came to our app, and we learned of yet another way that data can look.

Postel's Law: Be strict when sending and tolerant when receiving. --- not just a good idea, it is the Interoperability LAW!

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 14:12):

The core question for me is whether an instance (and the system that produces it) can reasonably be conformant with the objectives of the US-Core IG if it shares an allergy that doesn't identify the subject or the allergen, or metadata about a document that doesn't actually point to the document in question. If those instances aren't conformant with the intention and there's no value in the system sharing them, then don't define the profiles in a way that allows that to conformantly occur.

view this post on Zulip Brett Marquard (Aug 07 2020 at 16:22):

US Core is walking a fine line, it's trying to set a bar to move everyone forward -- in your example it's a shame they weren't using US Core! Certification with inferno will verify system capabilities, it will be important to get those out in the field.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 16:27):

@Brett Marquard I don't understand. Inferno (if it's just checking US core validity) would be totally happy with an AllergyIntolerance with a DAR for code or a DocumentReference with a DAR for content.

view this post on Zulip Brett Marquard (Aug 07 2020 at 16:27):

nope.

view this post on Zulip Brett Marquard (Aug 07 2020 at 16:29):

That doesn't meet the "US Core Responders SHALL be capable of populating all data elements"

view this post on Zulip Brett Marquard (Aug 07 2020 at 16:29):

aren't you on vacation?

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 16:30):

Vacation starts tomorrow. I'm not talking about an application that's not capable. I'm talking about an application that has garbage data - that we're allowing to be shared as conformant data.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 16:31):

Presumably the application would also have 'good' data that didn't use DAR in inappropriate places.

view this post on Zulip Cooper Thompson (Aug 07 2020 at 16:33):

I'm very skeptical of the viewpoint that data must have certain content to be shared. The real world is just far too messy for that to be successful. If an IG were to prohibit the use of DAR, that just means that IG is prohibiting the sharing of real-world data. I always bring up legacy data and patient-entered data. Consider a patient-entered allergy that was provided during a time window when there was a bug in the form validation for the allergen. The system has that data. Preventing it from being shared is not appropriate for a data-sharing IG in my opinion. I feel like the manta "Garbage in, miracle out" best describes how you have to approach healthcare data.

view this post on Zulip Cooper Thompson (Aug 07 2020 at 16:35):

1..* cardinality should mean "in the future you should try your best to make sure you have this", not "all the historical data in the system must have this".

view this post on Zulip Cooper Thompson (Aug 07 2020 at 16:36):

Otherwise, in conjunction with regulatory requirements, you'd be requiring that clinical users perform manual review and cleanup of years worth of clinical data. Which practically just isn't gonna happen.

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 16:59):

mustSupport means "try your best to have this". 1..x says "you can count on this being present".

view this post on Zulip Lloyd McKenzie (Aug 07 2020 at 17:00):

In the example where there was a bug in the form validation and a system receives a record that says "Patient has an allergy to 'not available'", what is anyone downstream supposed to do with that?

view this post on Zulip Cooper Thompson (Aug 07 2020 at 17:14):

If the downstream is a patient app, they could review it and submit a correction (of course correction submission isn't quite there yet). Or submit a deletion request. Or if it is provider facing, and the reaction is severe for an unconscious patient, that might alter the treatment plan.

view this post on Zulip Cooper Thompson (Aug 07 2020 at 17:15):

Ultimately, "low quality data" is not currently an Info Blocking exception in the US. So at least for data covered by Info Blocking, preventing the sharing of that data just because it is low quality is not an option.

view this post on Zulip Robert Scanlon (Aug 07 2020 at 17:56):

I don't understand. Inferno (if it's just checking US core validity) would be totally happy with an AllergyIntolerance with a DAR for code or a DocumentReference with a DAR for content.

Inferno's US Core tests have profile-wide must support checks, which looks across all resources provided for each profile and determines if the system has demonstrated support for every must support in aggregate. If they haven't yet, the test will 'SKIP' and ask the tester to choose a patient (or set of patients) with more complete data. If the tests ever sees a resource that is invalid, on the other hand, it will FAIL the system.

view this post on Zulip Ioana Singureanu (Aug 10 2020 at 14:20):

Robert Scanlon said:

I don't understand. Inferno (if it's just checking US core validity) would be totally happy with an AllergyIntolerance with a DAR for code or a DocumentReference with a DAR for content.

Inferno's US Core tests have profile-wide must support checks, which looks across all resources provided for each profile and determines if the system has demonstrated support for every must support in aggregate. If they haven't yet, the test will 'SKIP' and ask the tester to choose a patient (or set of patients) with more complete data. If the tests ever sees a resource that is invalid, on the other hand, it will FAIL the system.

Hi @Robert Scanlon : "must support" is a tough thing to test: in the past we have had flavors of mandatory: mandatory, required but null null, required but may be empty [0..10] (e.g. allergies are mandatory/required but you may not have any allergy findings because you were not evaluated). @Mark Kramer and @Rick Geimer joined us for a discussion in Sydney where we discussed this topic (see Minutes: US Realm Conformance Testing PSS topci https://confluence.hl7.org/display/CONF/2020-02+Conformance+Meeting+Notes ) . *To address the testing challenges wiht "must support" * we agreed to create an extension for ElementDefinition (http://build.fhir.org/elementdefinition.html#ElementDefinition) that will become an enhancement for future a future release but it be available for US Core in FHIR R4+ *.
We are meting to discuss the proposed _Conformance Usage Indicator_ extension during the Conformance WG calls - starting next week and during the virtual HL7 WGM: https://confluence.hl7.org/display/CONF/Conformance%2C+Guidance+and+Best+Practices+for+FHIR+Implementation+Guides+Project

For anyone interested in discussing this topic, you are welcome to join us: https://confluence.hl7.org/display/CONF/Call+Information


Last updated: Apr 12 2022 at 19:14 UTC