FHIR Chat · Inferno Testing · Covid-19 Response

Stream: Covid-19 Response

Topic: Inferno Testing


view this post on Zulip Nick Rupley (May 13 2020 at 14:29):

So currently the MeasureReport resources we have loaded in our system are just the ones directly from the examples.json.zip file in the Connectathon track page. Testing our using the Inferno client, I was surprised to see that the resource doesn't pass validation on many different points. Here's the first one I see:

MeasureReport/ExampleNJ-20200411-CDCPatientImpactAndHospitalCapacity: MeasureReport.group[0].code: None of the codes provided are in the value set http://hl7.org/fhir/us/saner/ValueSet/MeasureGroups (http://hl7.org/fhir/us/saner/ValueSet/MeasureGroups, and a code from this value set is required) (codes = http://hl7.org/fhir/us/saner/CodeSystem/GroupSystem#Beds)

But the code in that resource does appear to have the correct code, at least as far as I know:

    <group>
        <code>
            <coding>
                <system value="http://hl7.org/fhir/us/saner/CodeSystem/GroupSystem"/>
                <code value="Beds"/>
            </coding>
        </code>

Are the examples from the official track Confluence page no longer valid / out of date? Or am I misunderstanding something?

view this post on Zulip John Moehrke (May 13 2020 at 14:33):

is that because there is no vocabulary binding in the core spec for MeasureReport? You might need to load the SANER profile on MeasureReport?

view this post on Zulip Reece Adamson (May 13 2020 at 14:35):

Can you share the inferno link you are using (if you click the "save" button in the top right it will give you a URL you can copy and paste here).

view this post on Zulip Reece Adamson (May 13 2020 at 14:37):

Looks like the codesystem is wrong and should be:

http://hl7.org/fhir/us/saner/CodeSystem/MeasureGroupSystem not http://hl7.org/fhir/us/saner/CodeSystem/GroupSystem.

See http://build.fhir.org/ig/HL7/fhir-saner/ValueSet-MeasureGroups.html

view this post on Zulip Reece Adamson (May 13 2020 at 14:38):

@Nick Rupley Thanks for bringing these up in chat too! Really helpful for our team to see these examples and find our own bugs.

view this post on Zulip Nick Rupley (May 13 2020 at 14:40):

Got it! I re-downloaded the examples.json.zip file and the resources have indeed changed since we last downloaded the file.

view this post on Zulip Reece Adamson (May 13 2020 at 15:16):

Another thing to note is that inferno is currently tuned pretty aggressively when validating resources against the SANER profiles in that it validates all resources returned from every search against it. In reality the link between the restful interface and the profile conformance is weak. A server may rightfully return MeasureReports that do not meet the PublicHealthMeasureReport profile because it also supports other use cases for things like search by date. As a previous chat.fhir discussion touched on, this is a bigger deal for testers than clients. For a tester, unless the resource claims in the meta.profile that it meets the profile, then its pretty much impossible to know if that resource should conform to a specific profile for any restful interaction. We can do, and have done, things that narrow down resources to be validated either on an IG level or a system-under-test level (e.g. all resources with a code = x SHALL conform to the profile and x is a parameter that can be provided to inferno).

From a Connectathon perspective it's probably not a huge deal because then you at least see everything. But, I think we might change the configuration to only validate the resource from the input id specified.

view this post on Zulip John Moehrke (May 13 2020 at 15:19):

Postels Law must prevail

view this post on Zulip John Moehrke (May 13 2020 at 15:20):

Often in a IG one must carefully explain to data creators that they MUST adhere to the profile; while also warning data consumers that they MUST expect the data to not be conformant.

view this post on Zulip Michael Donnelly (May 13 2020 at 15:22):

John Moehrke said:

Postels Law must prevail

I think about that at least three times a week.

view this post on Zulip Michael Donnelly (May 13 2020 at 16:37):

Woot - I just tried this out and passed 2/9 on the first try. :) https://infernotest.healthit.gov/inferno/lpbJEB3sGLP/test_sets/ad_hoc_testing/#MeasureSourcePullServer/ad_hoc_testing_MeasureSourcePullServer_MeasureSourcePullPublicHealthMeasureReportSequence

view this post on Zulip Michael Donnelly (May 13 2020 at 16:51):

@Reece Adamson I'm failing tests 3, 4, and 5 because we don't let you specify just one of those criteria. How hard is it to add a test that searches by measure and subject and period?

view this post on Zulip Nick Rupley (May 13 2020 at 17:10):

With the updated resources in our system still getting some validation errors, here's one:

MeasureReport/ExampleNJ-20200415-CDCPatientImpactAndHospitalCapacity: MeasureReport.group[0].population[2]: HasValueOrDataAbsentReason: A population.count must have a value, or .extension.url = 'http://hl7.org/fhir/StructureDefinition/data-absent-reason' [count.exists() or (extension.url = 'http://hl7.org/fhir/StructureDefinition/data-absent-reason')]

In that "ExampleNJ-20200415-CDCPatientImpactAndHospitalCapacity" resource here is group[0].population[2]:

        <population>
            <code>
                <coding>
                    <system value="http://hl7.org/fhir/us/saner/CodeSystem/MeasurePopulationSystem"/>
                    <code value="numBedsOcc"/>
                </coding>
                <coding>
                    <system value="http://terminology.hl7.org/CodeSystem/measure-population"/>
                    <code value="measure-population"/>
                </coding>
            </code>
            <count>
                <extension url="http://hl7.org/fhir/StructureDefinition/data-absent-reason">
                    <valueCode value="unsupported"/>
                </extension>
            </count>
        </population>

So it does appear to have a data absent reason, yet it looks like it's still failing validation. Is this an issue on the Inferno side, or is that data absent reason extension not correct?

view this post on Zulip Reece Adamson (May 13 2020 at 17:10):

@Michael Donnelly Nice! Looks like the validator might have had an issue on our end for SPHMREP-09 that I'll check out (might be an intermittent network issue ¯\_(ツ)_/¯).

Currently the tests represent the requirements in the CapabilityStatements which doesn't include any search parameter combinations.

We can add a search parameter combination test for those 3 though so folks can try out that interaction.
(Assuming you mean something like[base]/MeasureReport/?measure=...&subject=...&period=... right?). @Chase Zhou is gonna look at this now.

If there's others like this folks are interested let me know! I can also add them as "MAY" requirements to the CapabilityStatement (in a PR) if we think these belong in the IG to at least show developers its an option too if desired.

view this post on Zulip Reece Adamson (May 13 2020 at 17:16):

@Nick Rupley I'll take a look into that, could be a bug in our end. If you could share the inferno URL that would be helpful.

view this post on Zulip Nick Rupley (May 13 2020 at 17:17):

Is this the correct one? https://infernotest.healthit.gov/inferno/8fMzuMxnBOf/test_sets/ad_hoc_testing/#MeasureSourcePullServer/ad_hoc_testing_MeasureSourcePullServer_MeasureSourcePullPublicHealthMeasureReportSequence

view this post on Zulip Keith Boone (May 13 2020 at 18:04):

I have a question for @Reece Adamson wrt Measure Consumer Push:
image.png
It looks as if the client is asking me which Measure and Location to use when creating the MeasureReport, but also asking for a MeasureReport.id, which is confusing me, since create would get an id assigned to it by the server. Am I missing something here?

view this post on Zulip Chase Zhou (May 13 2020 at 18:08):

@Keith Boone I think that's an oversight on our part. Those values aren't used in the actual test so you should be able to input anything. I'll look into removing those requirements for the consumer push tests.

view this post on Zulip Michael Donnelly (May 13 2020 at 18:10):

Reece Adamson said:

We can add a search parameter combination test for those 3 though so folks can try out that interaction.
(Assuming you mean something like[base]/MeasureReport/?measure=...&subject=...&period=... right?). Chase Zhou is gonna look at this now.

Exactly right.

view this post on Zulip Nick Rupley (May 13 2020 at 18:15):

FYI it looks like all of the Location resources in the examples don't have name/type, so they fail in the Inferno test:

Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.name': minimum required = 1, but only found 0
Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.type': minimum required = 1, but only found 0

view this post on Zulip Reece Adamson (May 13 2020 at 18:15):

@Keith Boone seconding what @Chase Zhou said. The Measure Source Pull tests (i.e. read and search) are currently the more robust option. We'll be cleaning them up and improving them over the next couple days.

view this post on Zulip Keith Boone (May 13 2020 at 18:19):

SPHMRE-01: Server creates MeasureReport resource with the MeasureReport create interaction results...
Fatal Error: undefined method `class_name' for #<Inferno::Sequence::MeasureConsumerPushPublicHealthMeasureReportSequence:0x000056226f2c26e8> Did you mean? class_eval

! SPHMRE-02: Server creates MeasureReport resource with the MeasureReport create interaction results...
Fatal Error: undefined method `class_name' for #<Inferno::Sequence::MeasureConsumerPushPublicHealthMeasureReportSequence:0x000056226f2c26e8> Did you mean? class_eval

Does this mean anything to y'all on Inferno side?

view this post on Zulip Reece Adamson (May 13 2020 at 18:19):

@Nick Rupley good find*.

Those are required fields for the resources in the profile (i.e. cardinality 1..1): http://build.fhir.org/ig/HL7/fhir-saner/StructureDefinition-saner-resource-location.html

view this post on Zulip Reece Adamson (May 13 2020 at 18:21):

@Keith Boone yes that's a bug (didn't have much of a chance to test the Push stuff before throwing it out here :slight_smile: ).

Can you send me the infernotest link? I'll fix that.

view this post on Zulip Keith Boone (May 13 2020 at 18:22):

https://infernotest.healthit.gov/inferno/42hfYWPvRJ0/test_sets/ad_hoc_testing/#MeasureConsumerPushServer/ad_hoc_testing_MeasureConsumerPushServer_MeasureConsumerPushPublicHealthMeasureReportSequence

view this post on Zulip Chase Zhou (May 13 2020 at 18:22):

@Keith Boone @Reece Adamson Thanks for catching that bug, it looks like a typo on our side where we forgot an '=' sign. We'll try to reoslve this soon

view this post on Zulip Keith Boone (May 13 2020 at 18:28):

I was so thrilled with all those green checkmarks to find out that they were all because the test couldn't be executed, not because anything we did succeeded as far as I can tell.
You might consider updating the UI to make them look like something other than "passed tests". I logged https://github.com/onc-healthit/inferno/issues/452 for that.

view this post on Zulip Keith Boone (May 13 2020 at 18:29):

Nick Rupley said:

FYI it looks like all of the Location resources in the examples don't have name/type, so they fail in the Inferno test:

Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.name': minimum required = 1, but only found 0
Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.type': minimum required = 1, but only found 0

I can probably address this quickly with a global search and replace on the instances.

view this post on Zulip Reece Adamson (May 13 2020 at 18:30):

@Keith Boone The checkmark issue looks like another bug because that doesn't happen in our other inferno projects (usually you get a purple exclamation point). I probably hastily broke something while creating the SANER tests... Thanks for submitting the issue and we'll look into it.

view this post on Zulip Nick Rupley (May 13 2020 at 18:35):

@Reece Adamson Sorry if I missed it, was there an update on that date-absent-reason issue above? Or you guys still looking into it?

view this post on Zulip Reece Adamson (May 13 2020 at 18:41):

Working on a fix as we speak. Because that DAR extension was on a primitive it was getting stripped out before being shipped to the validator service. I'll let you know when the fix is up.

view this post on Zulip Nick Rupley (May 13 2020 at 18:51):

Cool. In other news I just manually updated the Locations on our server for now to all have name/type/mode/status and now....
image.png

view this post on Zulip Nick Rupley (May 13 2020 at 18:54):

I also noticed this error for the MeasureReports:

MeasureReport/FHIR-197: MeasureReport.measure: URL value 'http://hl7.org/fhir/us/saner/FEMADailyHospitalCOVID19Reporting' does not resolve

That should be "http://hl7.org/fhir/us/saner/Measure/FEMADailyHospitalCOVID19Reporting" instead of "http://hl7.org/fhir/us/saner/FEMADailyHospitalCOVID19Reporting" right? Looks like another possible search/replace update for the resources if so @Keith Boone

view this post on Zulip Gino Canessa (May 13 2020 at 19:17):

I updated the generator, pushed out the examples, and updated a PR for the IG repo.
(edit: re: URL for MeasureReport.measure)

view this post on Zulip Gino Canessa (May 13 2020 at 19:25):

Keith Boone said:

Nick Rupley said:

FYI it looks like all of the Location resources in the examples don't have name/type, so they fail in the Inferno test:

Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.name': minimum required = 1, but only found 0
Location/Loc-X143302: Location: Profile http://hl7.org/fhir/us/saner/StructureDefinition/saner-resource-location, Element 'Location.type': minimum required = 1, but only found 0

I can probably address this quickly with a global search and replace on the instances.

Missed this one earlier - what should this look like?

view this post on Zulip Gino Canessa (May 13 2020 at 19:36):

RE: Location.name and type. I just updated everything with those changes. I used bu (building) for the location type and just tacked on "Building" to the organization name for now - happy to change if something else would be better.

view this post on Zulip Nick Rupley (May 13 2020 at 19:37):

@Reece Adamson FYI on SPHMEA-03, it says:

Could not find parameter value for ["code"] to search by.

However Measure resources don't have a direct "code" property, I think that code parameter is meant to search inside the group/population/code and group/stratifier/code instead right?

image.png

view this post on Zulip Nick Rupley (May 13 2020 at 19:38):

I think that would also apply to SPHMSTR-03

view this post on Zulip Reece Adamson (May 13 2020 at 19:39):

@Gino Canessa I'll defer to @Keith Boone for what the values should be, but for type it might be nice to use a code from the extensibly bound value set: http://hl7.org/fhir/R4/v3/ServiceDeliveryLocationRoleType/vs.html

HOSP seems fairly general ¯\_(ツ)_/¯

view this post on Zulip Keith Boone (May 13 2020 at 19:40):

Bingo. I'd call that good enough. We need a value set for these as they roll up.
And values for HSA, HRR, and PCSA in addition to zip-code, county, and state rollup locations.

view this post on Zulip Gino Canessa (May 13 2020 at 19:41):

Sounds good.. updating now

view this post on Zulip Nick Rupley (May 13 2020 at 19:47):

@Gino Canessa Also the states-NJ resource doesn't have mode/status fields in addition to the name/type fields.
I think should be mode=instance and status=active, judging from the other Location resources in the examples

view this post on Zulip Gino Canessa (May 13 2020 at 19:48):

RE: Location.type - now using the correct system with HOSP :-)

view this post on Zulip Gino Canessa (May 13 2020 at 19:48):

I'll have to punt on that one Nick - I'm not generating the summary versions

view this post on Zulip Nick Rupley (May 13 2020 at 19:51):

Got it no worries, I've just been updating them in my own database as I go

view this post on Zulip Reece Adamson (May 13 2020 at 19:58):

@Nick Rupley right now that test is only looking at the first option and otherwise skips. so for Measure it looks for the code in Measure.topic, searches by that topic, and then makes sure that the resources returned actually have the topic that was searched for.

In reality it could be from any of Measure.topic | Measure.group.code | Measure.group.population.code | Measure.group.stratifier.code | Measure.group.stratifier.component.code | Measure.supplementalData.code

We have it on our list to make it more general and better handle this situation, but we threw this up as a first cut based on the amount of time we had. Thanks for bringing it up, I wasn't sure if anyone would run into it :wink: .

view this post on Zulip Nick Rupley (May 13 2020 at 20:06):

Gotcha, that's because I was using one of the Measure resources from the examples that did not have a topic. I ran it with the "ComputableFEMADailyHospitalCOVID19Reporting" measure instead and that particular test worked! However a separate test failed with that Measure:

 SPHMEA-04: OPTIONAL | Server returns valid results for Measure search by definition-text. results...
Could not find parameter value for ["definition-text"] to search by.

Interestingly the "CDCPatientImpactAndHospitalCapacity" measure fails the "code" test but succeeds with the "definition-text" test. I'm assuming the definition-text one is similar, looks for one particular field like Measure.title?

view this post on Zulip Reece Adamson (May 13 2020 at 20:11):

@Nick Rupley you're right on the money. I talked to @Chase Zhou and we'll be looking at that after we push the next batch of updates.

view this post on Zulip Nick Rupley (May 13 2020 at 20:17):

Cool thanks! For now I've just updated my Measure resources to have both topic and title, and now all is well!
image.png

view this post on Zulip Reece Adamson (May 13 2020 at 21:13):

infernotest.healthit.gov has been redeployed!

Updates include:

  • Now only validates the first resource which is provided by the id
  • properly checks resources with primitive extensions
  • adds search combination test for measure+subject+period

Also...

:new: Validator app for checking individual resources.

https://infernotest.healthit.gov/validator

Usage:

  1. Copy/paste or select a file from your machine to be validated in the top section
  2. Select the Implementation Guide and then the profile in the multiselect OR copy and paste a profile (not recommended, but you can)

Click Submit.

You'll get the same validation results as the desktop jar and all the SANER profiles are preloaded. JSON for now (actively fixing the XML issues :slight_smile: ). It supports error highlighting and jumping to errors.

https://infernotest.healthit.gov/validator

view this post on Zulip Nick Rupley (May 13 2020 at 21:18):

Nice job @Reece Adamson !
image.png
Ping us when the Consumer Push side of things is ready and we'll test that out as well

view this post on Zulip John Moehrke (May 13 2020 at 21:48):

@Reece Adamson can you add that instructions to the confluence page? That way it doesn't get lost in the zulip noise.

view this post on Zulip Abbie Watson (May 14 2020 at 16:00):

Does anybody have an example of a MeasureReport that has the correct MeasureGroup value codes?

Screen-Shot-2020-05-14-at-10.42.14-AM.png

view this post on Zulip Nick Rupley (May 14 2020 at 16:03):

Is this FHIR-470 resource the same as yours? http://ec2-34-210-212-20.us-west-2.compute.amazonaws.com:9001/MeasureReport/FHIR-470/_history/3

view this post on Zulip Nick Rupley (May 14 2020 at 16:03):

We had an older version until we re-downloaded the examples.json.zip file and found the newer versions

view this post on Zulip Nick Rupley (May 14 2020 at 16:08):

Actually I just re-downloaded it again and many resources were removed, including FHIR-470!

view this post on Zulip Abbie Watson (May 14 2020 at 16:11):

Perfect! Thank you so much!
Screen-Shot-2020-05-14-at-11.07.57-AM.png

view this post on Zulip Michael Donnelly (May 14 2020 at 16:20):

If you want another one: https://connectathon.epic.com/Interconnect-Fhir-Unsecure/api/FHIR/R4/MeasureReport/ePnc97ybBBxHKmf4PuKGRdob0nJYkccqHYE2JYOrpDqsrVg.pkkhcZSELcFS.P9-53

view this post on Zulip Reece Adamson (May 15 2020 at 13:01):

@Keith Boone The Measure Consumer Push (Server) tests are working now. The tests are more rudimentary than the search ones because there are less options, but should at least ensure the basic functionality (content testing on a create or update is trickier in this situation when read is not required and when the server is permitted to not include all the data provided in the create/update based on what it supports).

I ran a quick test with your server and it looks good so far!

Screen-Shot-2020-05-15-at-8.56.13-AM.png

view this post on Zulip John Moehrke (May 15 2020 at 13:30):

In inferno, how are we separating the testing to SANER, which is an international specification, from testing against the USA specific measure definitions that are contained in SANER? I am not clear on how to completely test, that is to be ready to give a positive result to a MeasureReport that is not using a measure definition inside of SANER, while giving a bonus positive result for those conforming to the CDC or FEMA measure definition. The unclear part is to what extent can we support generically today deviations beyond FHIR core use of measure and measureReport?

view this post on Zulip Reece Adamson (May 15 2020 at 14:20):

@John Moehrke I just talked with @Keith Boone about this and I think this is going to require a bigger discussion on how we want to test this sort of thing and any additional language we need in the IG to back it up. Right now in Inferno the MeasureReport with the ID provided will be validated against the HL7 validator and the PublicHealthMeasureReport Profile with no special inferno consideration outside of what's in the profile. If there's any specific measure related checks (I didn't see any spec language on it in base FHIR validation section similar to what there is for Questionnaire, but maybe its somewhere else) then it should happen in that validation step.

In terms of "bonus positive results" I think we should maybe talk on Zoom or set up a meeting later next week so I can better understand what you mean and make sure we have any IG language to back it up. Plus I'm pretty new to MeasureReport/Measure so I'm sure I'll have a bunch of questions.

view this post on Zulip John Moehrke (May 15 2020 at 14:22):

we are all new to this.. if you have experience with Questionnaire then I would expect this to be similar.

view this post on Zulip John Moehrke (May 15 2020 at 14:22):

on timing, right.. I was mostly opening the discussion, not demanding any solution. Discussion beyond this week is expected

view this post on Zulip John Moehrke (May 15 2020 at 14:26):

what I was assuming is that a MeasureReport that points at a measure should be ( a ) tested against the SANER MeasureReport profile, and if the measure being asserted in the MeasureReport is one that you can understand (canonical or reference) then ( b ) that an additional check would be done to assure that the contents of the MeasureReport conform to the measure definition. The SANER profile of MeasureReport can't restrict the value in .measure (my assertion based on my new understanding that our PSS scope is international not CDC/FEMA specific).

view this post on Zulip Ben Levy (May 15 2020 at 14:26):

What kind of measure-related checks could we expect validators to do?

view this post on Zulip John Moehrke (May 15 2020 at 14:27):

I state this first to get reaction that I am wrong.. second to get my mind well enough to document it and write issues that support it

view this post on Zulip John Moehrke (May 15 2020 at 14:28):

Ben Levy said:

What kind of measure-related checks could we expect validators to do?

there is a set of measures defined in the Measure for a given class of measure (e.g. CDC or FEMA we have done). So if a MeasureReport says it is following CDC measure definition, then it better have those key/value pairs... not sure if we can complain if it has more than those.

view this post on Zulip John Moehrke (May 15 2020 at 14:29):

and we have had discussions about having less than defined in the measure..

view this post on Zulip Reece Adamson (May 15 2020 at 14:32):

So if a MeasureReport says it is following CDC measure definition, then it better have those key/value pairs...

Do you have a link to the language backing this in the spec? Asking solely for my own edification because I didn't see it based on a cursory look through the validation/Measure/MeasureReport sections.

view this post on Zulip John Moehrke (May 15 2020 at 14:35):

I am not saying that it says that now

view this post on Zulip John Moehrke (May 15 2020 at 14:35):

I am saying it seems like it should say that

view this post on Zulip John Moehrke (May 15 2020 at 14:35):

I was unaware of this layering until late last night

view this post on Zulip John Moehrke (May 15 2020 at 14:38):

I am thinking first that this could be additional constraint that SANER could apply, for those measures we have included in SANER. I am not sure it is appropriate for FHIR Core to say this, but it does seem like a useful 'should'. But I am way beyond my understanding.

view this post on Zulip Reece Adamson (May 15 2020 at 14:40):

Gotcha :thumbs_up: . I could clearly see a MeasureReport profile making this kind of check easy, but from a testing perspective I imagine we'd want to be able to point to a requirement if enforced by some other means.

I agree overall and that type of check makes sense.

view this post on Zulip John Moehrke (May 15 2020 at 14:48):

okay, I will write this into testplan as contingent on a closing of an open issue about if saner is limited to framework and that saner will not be imposing ANY library of measures.

view this post on Zulip John Moehrke (May 15 2020 at 14:54):

https://github.com/AudaciousInquiry/fhir-saner/issues/81

view this post on Zulip Reece Adamson (May 15 2020 at 16:09):

@Keith Boone & @John Moehrke There was some talk about authorization in the last call. Has there been any thought about those types of requirements (like using SMART) or desire for things like SMART-on-FHIR testing?

view this post on Zulip John Moehrke (May 15 2020 at 16:21):

We have a Security Considerations page http://build.fhir.org/ig/HL7/fhir-saner/security_considerations.html

view this post on Zulip John Moehrke (May 15 2020 at 16:22):

which, like everything, is up for debate.

view this post on Zulip John Moehrke (May 15 2020 at 16:24):

but what it indicates (my authorship) is that the MeasureReports are not patient specific, but might be business sensitive. So, the core SANER would not impose security, but a specific measure definition might (words not yet added). A specific instance of a publishing system might also add client authentication to support business sensitive, or SLA. Those specific instance security requirements are above-and-beyond SANER.

view this post on Zulip John Moehrke (May 15 2020 at 16:31):

https://github.com/AudaciousInquiry/fhir-saner/issues/82

view this post on Zulip Minh Tran (May 15 2020 at 17:06):

@Reece Adamson your PUSH test for Location Profile using a payload missing Location.name & Location.type and thus causing the next Pull test to fail validating it.

view this post on Zulip Abbie Watson (May 22 2020 at 03:50):

Hi,
So, I've been working through various different parts of the IG, and have gotten back around to Inferno testing. Happy to report that I have the push functionality all complete. Yay.

Screen-Shot-2020-05-21-at-10.20.42-PM.png

view this post on Zulip Abbie Watson (May 22 2020 at 03:52):

However, I'm having some problems with SPHMREP-10, RLP-12, SPHMEA-05, and SPHMSTR-05. I'm getting a This property must be an object, not a primitive property error.

Screen-Shot-2020-05-21-at-10.19.41-PM.png

view this post on Zulip Abbie Watson (May 22 2020 at 03:53):

When I dig into the results, I get this:
Screen-Shot-2020-05-21-at-10.19.55-PM.png

view this post on Zulip Abbie Watson (May 22 2020 at 03:53):

And the http://hl7.org/fhir/us/saner/StructureDefinition/PublicHealthMeasure leads to a 404. So.
Screen-Shot-2020-05-21-at-10.20.02-PM.png

view this post on Zulip Abbie Watson (May 22 2020 at 03:58):

Oh, and here's the JSON object in Postman. It's just got a plain text string in both id and _id. The JSON looks valid.

Screen-Shot-2020-05-21-at-10.56.10-PM.png

view this post on Zulip Abbie Watson (May 22 2020 at 04:08):

Any thoughts or recommendations on how to decypher this error message? Or what the Measure JSON should look like?

view this post on Zulip John Moehrke (May 22 2020 at 10:39):

@Reece Adamson ?

view this post on Zulip Reece Adamson (May 26 2020 at 14:42):

@Abigail Watson The two properties identified as having issues, Measure.id and Measure.meta.lastUpdated, are both prepended with an _ in JSON, indicating they should be an object containing just the id and extensions (if present) as the error indicates.

You'll see the same errors when taking that resource (measure.json) and validating it with the HL7 Desktop Jar:

java -jar ./org.hl7.fhir.validator.jar -ig hl7.fhir.us.saner#current -version 4.0.1 measure.json
FHIR Validation tool Version 4.2.18-SNAPSHOT (Git# 175d5fa0b72d). Built 2020-04-21T14:15:21.346+10:00 (35 days old)
Detected Java version: 1.8.0_252 from /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre on x86_64 (64bit). 3641MB available
Arguments: -ig hl7.fhir.us.saner#current -version 4.0.1 measure.json
Directories: Current = /Users/radamson/Desktop, Package Cache = /Users/radamson/.fhir/packages
  .. FHIR Version 4.0, definitions from hl7.fhir.r4.core#4.0.1
  .. connect to tx server @ http://tx.fhir.org
    (v4.0.1)
+  .. load IG from hl7.fhir.us.saner#current
+  .. load IG from hl7.fhir.us.core#3.1.0
  .. validate [measure.json]
Terminology server: Check for supported code systems for http://snomed.info/sct
*FAILURE* validating measure.json:  error:3 warn:11 info:0
  Error @ Measure.id (line 2, col30) : This property must be an object, not a primitive property
  Error @ Measure.meta.lastUpdated (line 8, col4) : This property must be an object, not a primitive property

Note the last two lines are the same errors you see in Inferno. If we look at id for example there are two properties:

{
  "id": "Y3N6HzhYoJc8gP6w8",
  "_id": "Y3N6HzhYoJc8gP6w8",
  ...
}

The JSON property prepended by an underscore should be an object containing an id and/or extensions, not just a plain primitive. For example, see this example from the FHIR spec:

 "birthDate": "1970-03-30",
 "_birthDate": {
   "id": "314159",
   "extension" : [ {
      "url" : "http://example.org/fhir/StructureDefinition/text",
      "valueString" : "Easter 1970"
   }]
 }

See the relevant part of the FHIR spec here. Hopefully that helps!

view this post on Zulip Abbie Watson (May 26 2020 at 15:51):

Aaaaah. Gotchya. It _was_ the underscores. :)

Very good. Thank you very much for the confirmation and the nudge in the right direction!

view this post on Zulip Abbie Watson (May 29 2020 at 21:26):

Success!

Symptomatic-SANER-InferoTestingSanerEdition.png

view this post on Zulip Abbie Watson (May 30 2020 at 17:15):

(deleted)


Last updated: Apr 12 2022 at 19:14 UTC