FHIR Chat · R3 Candidate build · implementers

Stream: implementers

Topic: R3 Candidate build


view this post on Zulip Grahame Grieve (Feb 21 2017 at 10:44):

If you maintain a reference implementation or other code built from off the FHIR definitions, then the next 5 days is the best time for you to do QA of the candidate build - the only reason for substantiative changes from the current build to the full R3 (other than stated version) is qa feedback from code generators.

@James Agnew @Ewout Kramer @nicola (RIO) @Rick Freeman @Pascal Pfiffner @Brian Postlethwaite

Note that the last change I will make when publishing R3 is the stated version: R3 will be 2.0.0

view this post on Zulip Grahame Grieve (Feb 21 2017 at 10:44):

that list of names is those that i think/can remember have generated code at one time or another

view this post on Zulip Josh Mandel (Feb 21 2017 at 12:41):

Adding @Dan Gottlieb (maintains FRED, the resource editor)

view this post on Zulip Chris Moesel (Feb 21 2017 at 13:28):

@Grahame Grieve Would this have any effect on your terminology server? I'm trying to build an IG using the Jan 2017 ballot version of FHIR (and the igpublisher.jar from it) -- and its connection with the terminology server seems to be broken since last night...

view this post on Zulip Chris Moesel (Feb 21 2017 at 13:43):

Nevermind. Seems to be working again. I bet I was trying to use it last night when you had the server down to upgrade it (around 1:30-2:30am EST).

view this post on Zulip Grahame Grieve (Feb 21 2017 at 21:26):

Y. But some data elements have been reordered in XML as of last night

view this post on Zulip nicola (RIO/SS) (Feb 21 2017 at 21:51):

Thank you, we will try new release

view this post on Zulip Mustafa Yuksel (Feb 22 2017 at 11:17):

We are not generating code from the definitions, but automatically configuring our server by parsing a capability statement and the FHIR definitions. Although not specific to the R3 candidate build, I have a comment regarding xpath expressions of composite search parameters. I could not find any similar discussion in zulip or forge.

We are dynamically generating search parameters and relevant db indices by parsing the search parameter definitions, specifically the xpaths. The problem is, xpaths of composite search parameters include always all the paths for all possible types, although the verbal description and FHIRpath expression are limited to the relevant types in scope. It would be easier for me to explain with an example: Consider the onset search parameters of Condition; i.e. onset-age, onset-date, onset-info:

        "code": "onset-age",
        "type": "quantity",
        "description": "Onsets as age or age range",
        "expression": "Condition.onset.as(Quantity) | Condition.onset.as(Range)",
        "xpath": "f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString",

        "code": "onset-date",
        "type": "date",
        "description": "Date related onsets (dateTime and Period)",
        "expression": "Condition.onset.as(dateTime) | Condition.onset.as(Period)",
        "xpath": "f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString",

        "code": "onset-info",
        "type": "string",
        "description": "Onsets as a string",
        "expression": "Condition.onset.as(string)",
        "xpath": "f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString",

I would really appreciate if xpaths are also appropriately restricted to the relevant type(s), just like FHIRpath expressions. We observe the same issue in DSTU2 as well, and there FHIRpath cannot help either.

view this post on Zulip Pascal Pfiffner (Feb 23 2017 at 14:41):

Thanks for the heads-up Grahame! Does generate well on my end. Is your server up-to-date? It does not return a valid capability statement (missing "kind" and missing "interaction" in "rest[78]"). Also, meta is missing when requesting a summary (I realize marking it _SUBSETTED_ is a _should_ and not a must).

view this post on Zulip Pascal Pfiffner (Feb 23 2017 at 14:55):

It seems however we are in violation of #5582 in quite some resources by making elements a minOccurs of 1 but not part of a summary. I'm assuming this is known and tolerated?

view this post on Zulip Grahame Grieve (Feb 24 2017 at 19:12):

I thought we had a hard rule in the tool that elements with minOccurs = 1 had to be in the summary. what's an example?

view this post on Zulip Grahame Grieve (Feb 24 2017 at 19:13):

@Mustafa Yuksel I will add this to my list; but I don't know whether I will get to it for R3. Unless you want to provide correct XPath statements... that would help

view this post on Zulip Mustafa Yuksel (Feb 27 2017 at 07:21):

@Grahame Grieve I cannot promise either due current work load, but I will try. I guess the easiest would be to generate from the FHIRpaths. When would be the hard deadline to make this part of R3?

view this post on Zulip Grahame Grieve (Feb 27 2017 at 08:58):

next 2 weeks

view this post on Zulip Grahame Grieve (Feb 27 2017 at 08:59):

at the moment, xpath statements are hand-written.

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:00):

First example is Account.guarantor.party: http://build.fhir.org/account.html

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:00):

Maybe the rule only applies to top-level properties?

view this post on Zulip Grahame Grieve (Feb 27 2017 at 09:02):

of course. If guarantor is not in the summary, then none of it's children will be either

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:03):

But if it is, and a summary is requested, then "party" will not be there. This is expected?

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:03):

(I mean "if it is present")

view this post on Zulip Grahame Grieve (Feb 27 2017 at 09:03):

since guarantor is not in the summary, it's irrelevant whether party is labelled to be in the summary or not

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:04):

Ah, of course. But I keep hitting this situation in capability statement, let me check...

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:06):

CapabilityStatement.rest.resource.interaction

CapabilityStatement.rest.resource is part of the summary, and CapabilityStatement.rest.resource.interaction has minOccurs=1 but is not part of the summary.

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:11):

Same with CapabilityStatement.rest.operation.name.

view this post on Zulip Pascal Pfiffner (Feb 27 2017 at 09:13):

And CapabilityStatement.messaging.event.(mode|focus) and CapabilityStatement.document.code.

view this post on Zulip Brian Postlethwaite (Feb 28 2017 at 00:51):

The build of the .net client is now working, so I'm running it through its paces on your server today @Grahame Grieve Will let you know if I find anything new.

view this post on Zulip Grahame Grieve (Feb 28 2017 at 00:53):

ok thanks

view this post on Zulip Ewout Kramer (Feb 28 2017 at 09:00):

Wow.....Claim.payee.resourceType is a trouble maker. Why would we allow an element with the same name as a "magic" property in json?

view this post on Zulip Ewout Kramer (Feb 28 2017 at 09:01):

Sure I can add something smart to the parser, but everyone building a parser has to account for this. Feels like changing the name is easier. In the mean time I'll look at what I can do in the .NET json parser...

view this post on Zulip Pascal Pfiffner (Feb 28 2017 at 09:36):

Wow, hadn't noticed Claim.payee.resourceType. No trouble with our parser and models but that is confusing.

view this post on Zulip Pascal Pfiffner (Feb 28 2017 at 09:36):

What are thoughts on the minOccurs/isSummary issue in things like CapabilityStatement.rest.resource.interaction?

view this post on Zulip Paul Knapp (Feb 28 2017 at 09:40):

We certainly could use a different name which is non colliding for X.payee.resourceType. We could change it to X.payee.resource

view this post on Zulip Ewout Kramer (Feb 28 2017 at 10:10):

Another issue, I get a compile error in our snapshot generator because ElementDefinition.min is now unsignedInt, but ElementDefinition.base.min is still integer. I am pretty sure we want these to align. See GF#12918

view this post on Zulip Ewout Kramer (Feb 28 2017 at 10:21):

Paul, that would be really helpful

view this post on Zulip Grahame Grieve (Feb 28 2017 at 10:48):

you can propose a task to change it and make it illegal, but for now, you have to fix the parser

view this post on Zulip Grahame Grieve (Feb 28 2017 at 10:51):

@Paul Knapp if you want to change the name, FMG has to approve it now.
@Pascal Pfiffner the capability statement stuff I need to fix as part of QA
@Ewout Kramer should we see if we can change the type of ElementDefinition.base.min type immediately?

view this post on Zulip Paul Knapp (Feb 28 2017 at 10:53):

So 2 tasks: 1) Change payee.resourceType to payee.resource in Claim and EOB, 2) Propose that magic element names NOT be allowed for element name at any level of the resource (and maybe tooling will check and error when time permits.)

view this post on Zulip Pascal Pfiffner (Feb 28 2017 at 10:54):

I have a list of 215 minOccurs/isSummary discrepancies, will see which are of the Account.guarantor.party non-issue type and which are conflicting.

view this post on Zulip Paul Knapp (Feb 28 2017 at 10:54):

I can raise with FMG tomorrow, also while discussion with Brian P saw that the binding strength is not aligned, so could ask to fix that too.

view this post on Zulip Grahame Grieve (Feb 28 2017 at 10:55):

there's obviously something wrong with my algorithm - it's supposed to disallow that

view this post on Zulip Paul Knapp (Feb 28 2017 at 10:57):

as in your tooling was already supposed to catch magic/reserved element names? or are you talking to Pascal?

view this post on Zulip Grahame Grieve (Feb 28 2017 at 11:04):

talking to Pascal. my tooling does catch other reserved words, just not that one (well, that one has not been reserved, because no one ever used it before)

view this post on Zulip Ewout Kramer (Feb 28 2017 at 11:55):

@Grahame Grieve - yes, I'd prefer to, otherwise I'd just be hacking work-arounds that I will have to remove later on....

view this post on Zulip Pascal Pfiffner (Feb 28 2017 at 15:29):

@Grahame Grieve here's a list of elements with n_min > 0 whose parent element isSummary = true but the element itself is not part of the summary.

CapabilityStatement.rest.resource.interaction
CapabilityStatement.rest.operation.name
CapabilityStatement.messaging.event.mode
CapabilityStatement.messaging.event.focus
CapabilityStatement.document.mode

Consent.actor.role
Consent.actor.reference
Consent.except.actor.role
Consent.except.actor.reference

Encounter.diagnosis.condition

Observation.related.target

Questionnaire.item.enableWhen.question

I am not sure about questionnaire. Questionnaire.item is not part of the summary but Questionnaire.item.enableWhen is. Not sure how that is expected to behave.

view this post on Zulip Pascal Pfiffner (Feb 28 2017 at 15:39):

Not sure this is also a tooling issue: these 3 value sets are part of a required binding it at least one resource but are missing from valuesets.json:

http://hl7.org/fhir/ValueSet/v3-ActIncidentCode
http://hl7.org/fhir/ValueSet/v3-ActInvoiceGroupCode
http://hl7.org/fhir/ValueSet/v3-ConfidentialityClassification

view this post on Zulip Ewout Kramer (Feb 28 2017 at 16:51):

I found that certain extensions in the build, like the file 'extension-us-core-race.xml' still uses an older format of StructureDefinition: in this file the discriminator is still a single primitive string....

view this post on Zulip Eric Haas (Feb 28 2017 at 16:54):

mmm. extension-us-core-race.xml should be out of the build. It was moved to US Core

view this post on Zulip Eric Haas (Feb 28 2017 at 17:03):

I didn't remove it completely - didn't realize that it was still generating the sd files

view this post on Zulip Eric Haas (Feb 28 2017 at 17:10):

and the us patient example is still there too - in the publish file?

view this post on Zulip Eric Haas (Feb 28 2017 at 17:28):

does that mean deprecated structures and examples (marked with !) in the source spreadsheets are being validated by toolsmiths?

view this post on Zulip Lloyd McKenzie (Feb 28 2017 at 18:21):

us state code should move out of core too?

view this post on Zulip Eric Haas (Feb 28 2017 at 18:50):

There is lot of content in the build that is US specific but waiting for the registries.....

view this post on Zulip Lloyd McKenzie (Feb 28 2017 at 18:57):

Why would registries affect whether it's published in US Core vs. FHIR Core?

view this post on Zulip Eric Haas (Feb 28 2017 at 19:02):

well us state codes are not needed in US-Core right now since we don'd constrain address so this would be informational only. Better to have a searchable registry for US codesystems, valuesets, Identifier systems than to stick US-Core. Don't you think?

view this post on Zulip Grahame Grieve (Mar 01 2017 at 02:11):

why are we stil generating the sd files? In fact, given that their format is wrong, I don't think we are still generating them. if you found them in your local copy, you need to clearn that out occasionally

view this post on Zulip Ewout Kramer (Mar 01 2017 at 08:45):

Well, I copy *all* files with the name extension-*.xml that are in the publish directory into our unit-tests. Maybe I should not do that then ;-)

view this post on Zulip Paul Knapp (Mar 01 2017 at 09:28):

US state codes aren't just used by the US Realm.

view this post on Zulip Ewout Kramer (Mar 01 2017 at 14:50):

@Eric Haas @Grahame Grieve Ah, yes, cleaning out the build worked.

view this post on Zulip Ewout Kramer (Mar 01 2017 at 14:51):

Grahame, what's in ElementDefinition.constraint.source? Sometimes it seems to be the name of the resource/datatype where the constraint originated, sometimes it's an *id* of an element (or it looks like that):

<source value="Observation:vitalsignsprofile"/>

view this post on Zulip Ewout Kramer (Mar 01 2017 at 14:52):

Found this in <url value="http://hl7.org/fhir/StructureDefinition/bodyweight"/>

view this post on Zulip Ewout Kramer (Mar 01 2017 at 15:17):

I have done a comparison of snapshots generated by the .NET and the Java stack. The good news: I don't think we've ever been this close. The bad news: there are still differences, and some of them remind me of late thursday night discussions during WGMs.

view this post on Zulip Ewout Kramer (Mar 01 2017 at 15:17):

To find out more, I have detailed the differences here: https://gist.github.com/ewoutkramer/f10e36a51747759f7cca5d54e9cd44e6

view this post on Zulip Ewout Kramer (Mar 01 2017 at 15:18):

@Michel Rutten @Grahame Grieve @Chris Grenz I hope you find this comparison useful.

view this post on Zulip Chris Grenz (Mar 01 2017 at 16:01):

@Ewout Kramer Excellent - I agree with your conclusions. The inclusion of base constraint is probably the only remaining point of contention. It's interesting that your example here includes the Observation:vitalsignsprofile id - this is an example of a root element having a sliceName that shouldn't (I think) be allowed. We need a constriant that disallows sliceName without slicing. GF#12849 addresses this and is deferred...this is and will be an issue for DSTU3 publication that will be very confusing for US-Core (and other) implementers

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:03):

I agree, that's the only point of contention left....which means we're in a pretty good position ;-)

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:06):

Note that in Grahame's id generation, the id is considered to be opaque ;-) So this is probably not meant to indicate a slicename (there is no explicit <sliceName> element here), i think Grahame uses a lower-cased profile id (from the StructureDefinition.url) to generate unique ids here....

view this post on Zulip Chris Grenz (Mar 01 2017 at 16:06):

I see that GF#12259 "missed the boat" - concerned that this leaves the behavior unclear for type slices

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:06):

GF#12259

view this post on Zulip Chris Grenz (Mar 01 2017 at 16:07):

The id is opaque? I thought it was required to be of the agreed upon format?

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:07):

Yes, that's too bad - then again there's only so much even GG can do before a deadline.....

view this post on Zulip Chris Grenz (Mar 01 2017 at 16:08):

Totally understand...would like to at least give some kind of guidance....

view this post on Zulip Chris Grenz (Mar 01 2017 at 16:09):

Mustn't the id be TypeName.element:sliceName/resliceName.element...etc?

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:09):

Hehehe, I already said that many of the differences I found remind me of late-thurday-night discussions ;-)

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:09):

I do remember this was considered a useful format, but not something you can depend on.....

view this post on Zulip Ewout Kramer (Mar 01 2017 at 16:10):

Maybe we should open up another topic about "R3 Candidate build - SD differences" to not pollute this thread too much here.

view this post on Zulip Grahame Grieve (Mar 01 2017 at 19:16):

the root element id of a profile must have something in the name, so that the id does not clash with the id of the element it is a profile of

view this post on Zulip Mustafa Yuksel (Mar 05 2017 at 20:53):

I finally found some time this weekend to work on xpath statement correction. I worked on the latest build, with lastUpdated time of "2017-03-04T01:00:52.026+00:00". I filtered with a simple xslt all the SearchParameters that have ORed xpath statements, which turned out to be 73 in total. Then I manually checked all; only a small portion (8 out of 73) have problems.

Below, I present those SearchParameters with the current fhirpaths, xpaths and with my updates. New xpaths are available in the xpathNew element. I updated 2 fhirpath statements as well, due to age vs. quantity inconsistencies. These are available in the expressionNew element.

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/ClinicalImpression-finding-code"/>
        <type value="token"/>
        <expression value="ClinicalImpression.finding.item.as(CodeableConcept)"/>
        <xpath value="f:ClinicalImpression/f:finding/f:itemCodeableConcept | f:ClinicalImpression/f:finding/f:itemReference"/>
        <xpathNew value="f:ClinicalImpression/f:finding/f:itemCodeableConcept"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/ClinicalImpression-finding-ref"/>
        <type value="reference"/>
        <expression value="ClinicalImpression.finding.item.as(Reference)"/>
        <xpath value="f:ClinicalImpression/f:finding/f:itemCodeableConcept | f:ClinicalImpression/f:finding/f:itemReference"/>
        <xpathNew value="f:ClinicalImpression/f:finding/f:itemReference"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-abatement-age"/>
        <type value="quantity"/>
        <expression value="Condition.abatement.as(Quantity) | Condition.abatement.as(Range) | Condition.abatement.as(Age)"/>
        <xpath value="f:Condition/f:abatementDateTime | f:Condition/f:abatementAge | f:Condition/f:abatementBoolean | f:Condition/f:abatementPeriod | f:Condition/f:abatementRange | f:Condition/f:abatementString"/>
        <expressionNew value="Condition.abatement.as(Range) | Condition.abatement.as(Age)"/>
        <xpathNew value="f:Condition/f:abatementAge | f:Condition/f:abatementRange"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-abatement-date"/>
        <type value="date"/>
        <expression value="Condition.abatement.as(dateTime) | Condition.abatement.as(Period)"/>
        <xpath value="f:Condition/f:abatementDateTime | f:Condition/f:abatementAge | f:Condition/f:abatementBoolean | f:Condition/f:abatementPeriod | f:Condition/f:abatementRange | f:Condition/f:abatementString"/>
        <xpathNew value="f:Condition/f:abatementDateTime | f:Condition/f:abatementPeriod"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-abatement-string"/>
        <type value="string"/>
        <expression value="Condition.abatement.as(string)"/>
        <xpath value="f:Condition/f:abatementDateTime | f:Condition/f:abatementAge | f:Condition/f:abatementBoolean | f:Condition/f:abatementPeriod | f:Condition/f:abatementRange | f:Condition/f:abatementString"/>
        <xpathNew value="f:Condition/f:abatementString"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-onset-age"/>
        <type value="quantity"/>
        <expression value="Condition.onset.as(Quantity) | Condition.onset.as(Range)"/>
        <xpath value="f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString"/>
        <expressionNew value="Condition.onset.as(Age) | Condition.onset.as(Range)"/>
        <xpathNew value="f:Condition/f:onsetAge | f:Condition/f:onsetRange"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-onset-date"/>
        <type value="date"/>
        <expression value="Condition.onset.as(dateTime) | Condition.onset.as(Period)"/>
        <xpath value="f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString"/>
        <xpathNew value="f:Condition/f:onsetDateTime | f:Condition/f:onsetPeriod"/>
    </SearchParameter>

    <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/Condition-onset-info"/>
        <type value="string"/>
        <expression value="Condition.onset.as(string)"/>
        <xpath value="f:Condition/f:onsetDateTime | f:Condition/f:onsetAge | f:Condition/f:onsetPeriod | f:Condition/f:onsetRange | f:Condition/f:onsetString"/>
        <xpathNew value="f:Condition/f:onsetString"/>
    </SearchParameter>

view this post on Zulip Mustafa Yuksel (Mar 05 2017 at 21:07):

In addition, I noticed that the last 2 SearchParameters, which are I guess the only ones in the whole set defined on an extension, contain the same xpath statement twice (i.e. duplicate entry), and they also do not have a fhirpath expression:

      <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/elementdefinition-11179-DataElement-objectClass"/>
        <type value="token"/>
        <xpath value="f:DataElement/f:element/f:mapping/f:extension[@url=&#39;http://hl7.org/fhir/StructureDefinition/11179-objectClass&#39;] | f:DataElement/f:element/f:mapping/f:extension[@url=&#39;http://hl7.org/fhir/StructureDefinition/11179-objectClass&#39;]"/>
      </SearchParameter>

      <SearchParameter>
        <url value="http://hl7.org/fhir/SearchParameter/elementdefinition-11179-DataElement-objectClassProperty"/>
        <type value="token"/>
        <xpath value="f:DataElement/f:element/f:mapping/f:extension[@url=&#39;http://hl7.org/fhir/StructureDefinition/11179-objectClassProperty&#39;] | f:DataElement/f:element/f:mapping/f:extension[@url=&#39;http://hl7.org/fhir/StructureDefinition/11179-objectClassProperty&#39;]"/>
      </SearchParameter>

view this post on Zulip Grahame Grieve (Mar 05 2017 at 22:39):

ok thanks. I'll work through these soon

view this post on Zulip Grahame Grieve (Mar 06 2017 at 06:50):

fixed

view this post on Zulip Mustafa Yuksel (Mar 06 2017 at 15:10):

:+1:

view this post on Zulip Ewout Kramer (Mar 09 2017 at 14:53):

I found this in some DSTU2 invariants in profiles-others:

extension(%ext-11179-permitted-value-valueset).count()

These are incorrect, since accoding to the FhirPath spec, the external variable reference should be an id, and cannot contain "-", hence this should be written as

extension(%"ext-11179-permitted-andso-on")

I don't know whether these definitions have moved somewhere else (in STU3 they are no longer in profiles-others), but this could be a common mistake still found in STU3.

view this post on Zulip Grahame Grieve (Mar 09 2017 at 19:14):

not a possible error in STU3


Last updated: Apr 12 2022 at 19:14 UTC