Stream: hapi
Topic: FhirInstanceValidator - code in a slice
Lars Rückert (May 21 2019 at 13:13):
Hello,
TL/DR: I have an Issue with the FhirInstanceValidator on a code in a required slice. Can I work around it without removing the profile from the validator?
To be precise: I want to create an Organization which is supposed to have a work address. The Profile states that it should have a slice of address with the use defined as work using this valueset. Without the Validator using my Profile enabled I can create the organization just fine, sending in something like:
{ "resourceType": "Organization", "name": "org", "address": [{ "use": "work", "city": "Atown", "postalCode": "12345", "country": "Bland", "line": [ "CStreet 1" ] }] }
When I activate the validator though, I get the following response:
"response": { "statusCode": 422, "body": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "processing", "diagnostics": "Problem evaluating slicing expression for element in profile <Profile> path Organization.address (fhirPath = true and (use memberOf 'http://hl7.o rg/fhir/ValueSet/address-use')): null", "location": [ "Organization.address" ] }, { "severity": "information", "code": "processing", "diagnostics": "Profile <Profile>, Element 'Organization.address[workAddress]'': Unable to check minimum required (1) due to lack of slicing validation", "location": [ "Organization" ] } ] }
I debugged through lots of the code and noticed that it gets to the point where the rule: use memberOf 'http://hl7.o
rg/fhir/ValueSet/address-use'
is evaluated.
The given value of use (which is work
) is being converted to a Codeing.
To do this the given valueset is trying to be expanded which ends up in this code:
@Override public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r4.model.ElementDefinition.ElementDefinitionBindingComponent binding, boolean cacheOk, boolean heiarchical) { throw new UnsupportedOperationException(); }
What I think to be weird, is that when the same kind of attribute (a code given as string value with an implicit valueset) is outside of a slice, it works. For example posting an observation which has a status that is part of a valueset as well, works.
I did notice though that posting an observation with an invalid status does not fail in validation but in processing.
Now to my question:
Is there any way for me to make the validator not fail on my adress slice other than removing the profile altogether?
Can I overwrite the expandVS function in my validator to make it work somehow?
Is there maybe a way to express the same thing in the profile in a different way? (Multiple adresses are okay, but one has to be a work address.)
Thanks and best regards,
Lars
James Agnew (May 21 2019 at 19:43):
Hi Lars,
Before any other checking, it would be worth testing your system against the latest snapshot builds of HAPI FHIR (3.8.0-SNAPSHOT). The validator is very actively developed, so many things have been fixed since 3.7.0 was released.
Lars Rückert (May 22 2019 at 07:35):
Hi James,
thanks for the answer, unfortunately we have a setup where we have to get the dependencies from maven, which seems not to be available yet.
I think we can work around it for now by changing the profile a bit.
Do you have an estimation as to when 3.8.0 will be released?
James Agnew (May 22 2019 at 12:46):
We'll be releasing on this coming Tuesday. If you want to use snapshot builds before then, there are instructions on how to do this here: http://hapifhir.io/download.html#_toc_using_snapshot_builds
Lars Rückert (May 22 2019 at 13:46):
That's great! Thank you a lot for the information.
Lars Rückert (May 23 2019 at 07:55):
Version 3.8.0 fixes the described Problem with codes in slices. Thanks.
Last updated: Apr 12 2022 at 19:14 UTC