AidboxForm BuilderSQL on FHIRCCDA -> FHIRValidator
Report 2024-10-07

FHIR Digest

A weekly summary of chat.fhir.org to help you stay up to date on important discussions in the FHIR world.

The discussion revolves around best practices for using the shared .fhir/packages registry, particularly focusing on package installation, versioning, and conflict resolution among tools. Key proposals include ensuring atomic and idempotent package installations, maintaining separate directories for each tool's data to avoid interference, and considering the necessity and format of the packages.ini file for version control.
65 comments
DO
EK

This is a discussion thread regarding the requirements for tools using the shared .fhir/packages registry.

Many tools are installing packages in this directory and relying on packages installed by other tools, but some behaviours (the content of packages.ini, the addition of indexing files), can lead to conflicts, particularly if multiple processes are trying to utilize this directory at the same time.

.lock file usage is used by the java core libraries (Validator, IG Publisher), but this is, as @Josh Mandel pointed out could be needlessly complex and avoided altogether if package installs were guaranteed to be an atomic action (install into a temp directory in .fhir/packages, and then rename) and idempotent (I don't care if another process installed a package over the one I just installed, because they will be guaranteed to be exactly the same).

What if we maintained that all tools should NOT be able to alter the content of installed packages, and should limit their own data to a subdirectory (for example .fhir/packages/.firely)?

Aside from package installation, this would also neatly prevent file name collisions (.fhir/packages/.hl7/my.package#1.2.3/some-new-file doesn't interfere with .fhir/packages/.firely/my.package#1.2.3/some-new-file) and means each tool just needs to implement concurrency within its own directory.

David Otasek2024-09-24T14:41:53Z

(deleted - accidental double post)

David Otasek2024-09-24T14:42:03Z

No idea why zulip posted that twice. Apologies.

David Otasek2024-09-24T14:49:40Z

can we live without packages.ini?

Grahame Grieve2024-09-24T15:12:19Z

as for indexing... I thought that we did that before install? can you check?

Grahame Grieve2024-09-24T15:12:30Z

I'm imagining a scenario where a pre-existing cache contains packages from previous implementations. How would we know that the packages are still compatible with the current way of doing things? packages.ini with a simple version is a good way of explicitly stating what particular interactions are supported in the cache.

David Otasek2024-09-24T15:21:52Z

that's true. There wouldn't really be contention around a packages.ini that only contained the cache version?

Grahame Grieve2024-09-24T15:22:53Z

I'll have to dig into the indexing as it was changed in recent merges, but my memory is that it generated missing indexes on package read, which was what necessitated re-arranging it.

David Otasek2024-09-24T15:23:24Z

If it only contains a package cache version, maybe it needs to not be 'packages.ini' at all.

David Otasek2024-09-24T15:24:49Z

but my memory is that it generated missing indexes on package read, which was what necessitated re-arranging it.

we can change it to only do it before the package is renamed.

If it only contains a package cache version, maybe it needs to not be 'packages.ini' at all.

gonna be something though

Grahame Grieve2024-09-24T15:26:21Z

cache.version?

David Otasek2024-09-24T15:26:58Z

could be. I don't mind, but the name and format aren't germane to the locking discussion?

Grahame Grieve2024-09-24T15:27:30Z

we can change it to only do it before the package is renamed.

This assumes then, that all other tools will also index before renaming. It would require it, in fact, and that the indexes produced are always the same.

David Otasek2024-09-24T15:28:06Z

Which I think will guarantee headaches.

David Otasek2024-09-24T15:28:29Z

And yeah, I don't care about the name. All I'd care about is the existence of something to indicate cache version.

David Otasek2024-09-24T15:30:49Z

Well, I do care about the name, a lot actually, but that discussion doesn't need to be here

David Otasek2024-09-24T15:48:58Z

that the indexes produced are always the same

there is a spec for the index, but I do deviate from it :-(

Grahame Grieve2024-09-24T15:57:28Z

@Martijn Harthoorn maybe we should talk about that

Grahame Grieve2024-09-24T15:57:41Z

the documentation for the index file says:

Grahame Grieve2024-09-24T15:58:09Z

The files array contains an object for each resource in the package with the following properties:
* filename - the filename in the package directory that is being described
* resourceType
* id
* url
* version
* kind
* type
* supplements
* content

but i had to add:

  • valueSet
  • derivation
Grahame Grieve2024-09-24T15:59:35Z

So all of the above needs to be satisfied, and:

The .index.json file can be rebuilt at any time

I can imagine the pain of sushi generating a bad index (not to imply that sushi would be prone to this) and then some other component having to deal with that. Or doing something (like above with valueSet) that gets overwritten by some other tool.

David Otasek2024-09-24T16:08:54Z

Tagging @Chris Moesel at request

David Otasek2024-09-24T17:48:54Z

And @Marten Smits is currently maintaining the .NET packaging library, so I am adding him too.

Ewout Kramer2024-09-24T18:03:17Z

SUSHI does not generate its own packages. We only cache packages that we have pulled from a registry or from the build server (for #current builds). When we do so, we follow the approach that Josh suggested, unzipping the tgz into a temporary folder and then moving it to the correct location in the cache. We don't modify anything in the package, except fixing up the folder structure in a few old packages (as described here). SUSHI doesn't generate, modify, or even read .index.json files.

Chris Moesel2024-09-24T19:19:50Z

thx

Grahame Grieve2024-09-24T19:23:18Z

:+1: for the temp folder approach. That indexing (or lack of indexing) behaviour is probably why Validator / IG Publisher builds its own, right Grahame?

David Otasek2024-09-24T19:23:27Z

builds its own what?

Grahame Grieve2024-09-24T19:23:42Z

Indexes. If it finds a package installed by sushi, without indexes, thats when it would build them.

David Otasek2024-09-24T19:24:09Z

@David Otasek - Generally speaking, I think that packages have a .index.json file in their distribution package, so when we cache the unzipped package, it usually already has a .index.json in it. That said, I don't know when that started happening, so I guess any packages prior to that wouldn't have one.

Chris Moesel2024-09-24T19:31:05Z

that's the case - it was about 5 years ago

Grahame Grieve2024-09-24T19:58:00Z

@Chris Moesel yes, that's my understanding as well. Sushi is doing a very literal install of the package, while the core libs are 'enhancing' it for optimization purposes. My proposition above was to do what Sushi does, and if .index.json or whatever is generated from another tool, it should go in .fhir/packages/.tool-id/to keep the package install idempotent.

David Otasek2024-09-24T19:58:53Z

why need to do that if the index is generated prior to renaming?

Grahame Grieve2024-09-24T20:07:29Z

That would have to be a requirement for every tool, then.

David Otasek2024-09-24T20:11:16Z

or we could delete and reinstall the package. Though that's not really the idea

Grahame Grieve2024-09-24T20:12:16Z

I'm not excited about that idea. Though not exactly the same, that has the same feel as the package clearing that was causing us grief.

David Otasek2024-09-24T20:15:16Z

With the .fhir/packages/.tool-id approach, I'm mostly attracted to the idea that the package will always be the same, and that different tools will have their own sandbox to do whatever they want. If I recall correctly someone mentioned they were maintaining some additional data of their own, which is exactly what we don't want.

David Otasek2024-09-24T20:18:44Z

that's firely - @Ewout Kramer

Grahame Grieve2024-09-24T20:21:29Z

That sounds right.

David Otasek2024-09-24T20:23:46Z

Yes, we Firely also generate a .firely.index.json file which contains a bunch of stuff we add for optimizing our tooling. We also still generate the .index.json as described by the spec. We used to add our own stuff there too a couple years ago, but I decided to keep that just as described by the spec so that other tools still work.

Marten Smits2024-09-26T11:53:11Z

@Marten Smits what do you add? Can we converge?

Grahame Grieve2024-09-26T11:54:06Z

Let me check.

Marten Smits2024-09-26T11:54:34Z

First of all, we put our index file at the root (so next to the package, example, and 'other' folder). So we have one index file for the entire package.

We add the following extra fields:

  • filepath (string): that's the relative path from the root to the file
  • hasSnapshot (bool): to check whether a profile has a snapshot already
  • hasExpansion (bool): to check whether a ValueSet already has an expansion
  • valuesetCodeSystem (string): which indexes implicit valuesets
  • conceptMapUris (complex):
    * source (string): conceptMap source
    * target (string): conceptMap target
  • namingSystemUniqueId (array of strings): lists the unique id's of NamingSystem.

Most of these we use the make resolving files from the packages faster.

Marten Smits2024-09-26T12:02:59Z

sounds like we can converge on that

Grahame Grieve2024-09-26T12:03:52Z

You've added

  • valueSet
  • derivation
    For what purpose?
Marten Smits2024-09-26T12:06:45Z

valueSet is CodeSystem.valueSet - again, for resolving things

Grahame Grieve2024-09-26T12:11:05Z

I can't see that I make use of derivation. So I don't know why I added it

Grahame Grieve2024-09-26T12:12:46Z

oh no, I do. I use it to find/explore the type hierarchy without having to load all the structure definitions

Grahame Grieve2024-09-26T12:13:53Z

Ok, that's easy enough indeed to align.
Do you want to keep having an index file per folder? Or no problem with moving it to the root?

Marten Smits2024-09-26T12:17:25Z

I think I put it in each folder because we didn't say, and it seemed the most conservative option. But it does matter to me - I don't load examples unless examples are being looked for, for example

Grahame Grieve2024-09-26T12:23:47Z

Sure, we can work around our root scope I guess.
Do we need to file a Jira ticket to change the index.json spec?

Marten Smits2024-09-26T12:48:12Z

yes we do need one

Grahame Grieve2024-09-26T13:02:40Z

For clarity, the full proposal here is that every tool installing a package to the package cache will:

  • Ensure any package they install has a conformant .index.json file, as defined by the spec mentioned (which will be updated)
  • Install packages to a temp directory first, generate indexes, and then rename that directory, to solve concurrency issues.
  • Support a packages.ini file (or similar) with a specification that includes package cache version.
David Otasek2024-09-26T14:53:41Z

I'll go on record as saying I wanted tools to keep their dirty work to their own directories (.firely, .hl7-core, .sushi), but I can be on board with the above if that's the consensus.

David Otasek2024-09-26T14:55:00Z

@David Otasek I'm not sure, but if you're proposing adding requirements on how packages are created too, we'll need some FHIR-I tickets to update the requirements on https://hl7.org/fhir/packages.html

Ward Weistra2024-09-26T20:32:14Z

For now .index.json and package.ini are not mandator (or described in the latter case). But perhaps you are not proposing to make them mandatory in publishing, but in that case maybe you could update the proposal wording above to reflect that :thank_you:

Ward Weistra2024-09-26T20:33:42Z

Yes, this is restricted to tools writing to the package cache, and I updated the proposal above. I think that falls out of FHIR spec territory. I believe .index.json will still remain optional, and Grahame has stated that we will need a Jira ticket to make changes to that spec.

David Otasek2024-09-26T20:37:54Z

even though they are not mandatory, I always populate them when publishing

Grahame Grieve2024-09-26T20:44:13Z

Well, actually the language in the package spec is intentional at saying tools can modify these indices at any time. Fine as long as they aren't in the package cache. If they're in the package cache, there will be a VERY specific point at which they can be changed, and then must remain static unless completely deleted.

I don't like that the package spec says something which is immediately contradicted in the package cache docs, but doesn't otherwise mention it. Maybe a note saying: "there are stricter rules regarding regenerating indices when utilizing a package cache".

David Otasek2024-09-26T22:29:37Z

At least a breadcrumb.

David Otasek2024-09-26T22:33:17Z

We don't support package.ini I think. Can someone explain what's its purpose?

Marten Smits2024-09-30T08:56:44Z

it has two purposes - one to mark the version of the overall repository. that's currently 1

Grahame Grieve2024-09-30T09:25:42Z

and second to track the last use date of packages, so a user can see which packages haven't been used.

Grahame Grieve2024-09-30T09:26:02Z

but that's not really doing anything about the moment

Grahame Grieve2024-09-30T09:26:11Z

Ah ok, we don't use it, or do anything with it. Is this a problem for anyone currently?

Marten Smits2024-10-02T14:49:58Z

We don't use it in SUSHI either (we neither read nor write it).

Chris Moesel2024-10-02T14:58:17Z
The discussion centered around the unavailability of the us.core#7.0.0 package on the Simplifier platform, with participants noting that the version is not published due to size limitations and dependency issues related to the VSAC package. Suggestions included downloading it manually, addressing publication bugs, and exploring options for tailored packages to ease future updates while maintaining compliance with existing standards.
54 comments

@Ward Weistra My colleague tried grab us.core#7.0.0 package from https://packages.fhir.org/hl7.fhir.us.core The package lists up to 6.1.0 but does not have 7.0.0. I tried using direct url: https://packages.simplifier.net/hl7.fhir.us.core/7.0.0 which also shows that this version does not exist. How should I get us core v7 package into simplifier?
Thanks and have a safe travel back home.

Yunwei Wang2024-09-27T17:07:18Z

I had the same issue, looking at the package on https://build.fhir.org/ig/HL7/US-Core/downloads.html, in the package.json file we have:

{
  "name" : "hl7.fhir.us.core",
  "version" : "7.0.0",
  "tools-version" : 3,
  "type" : "IG",
  "date" : "20240627054756",
  "license" : "CC0-1.0",
  "canonical" : "http://hl7.org/fhir/us/core",
  "notForPublication" : true,

with the bottom line ensuring it isn't published on the package registry. I guess the only option is to download it manually

Ryan May2024-09-30T13:29:19Z

@Eric Haas is this a publication bug?

Yunwei Wang2024-09-30T13:40:17Z

I don't have control over package creation. The link is the same as in the publication history page. Simplifier only lists 6.1.0 and 3.1.1. Where are you downloading it manually?

Eric Haas2024-09-30T14:27:10Z
Yunwei Wang2024-09-30T14:41:10Z

@Ryan May @Eric Haas I think that may just be a result of looking at build.fhir.org. The package registry gets released versions from https://github.com/FHIR/ig-registry/blob/master/package-feeds.json -> https://hl7.org/fhir/package-feed.xml and the one there looks fine.

Ward Weistra2024-09-30T14:52:56Z

@Yunwei Wang The real issue is here: US Core 7 builds on VSAC 0.18.0 and that package is huge, so has been refused by the package registry infrastructure for now. US Core will next be refused because of missing dependencies.

Ward Weistra2024-09-30T14:54:10Z

The consensus is now that VSAC should indeed no longer be distributed as a FHIR package, but we're investigating if an exception can be made for the existing VSAC packages, perhaps one or more future ones and only those. And agree at FHIR-I on a package size limit value.

Ward Weistra2024-09-30T14:55:54Z

But this will take a moment...

Ward Weistra2024-09-30T14:56:04Z
Ward Weistra2024-09-30T14:57:01Z

(deleted)

Eric Haas2024-09-30T15:13:40Z

The versioned US Core all point to the correct package version, The current version points to the current package, so I think this will be all sorted out in the next versions. :fingers_crossed:

Eric Haas2024-09-30T15:18:13Z

IN case it helps - for the short term, any VSAC value set that is used in US Core (or C-CDA) has HL7 US Realm Program Management Author and HL7 US Realm Program Management Steward (Role : Steward). Should be part of the VS meta data

Gay Dolin2024-10-02T15:17:38Z

(deleted)

Yunwei Wang2024-10-02T15:21:43Z

Also - minimally - IMHO the package should include only value sets that have status "active"

Gay Dolin2024-10-02T15:21:58Z

OK for the bigger issue though - I think my points stand. Also we could probably find out all IGs that use VSAC for VS build and source of truth and find out who the authors/stewards are and limit the VSAC package to that

Gay Dolin2024-10-02T15:24:39Z

@Grahame Grieve I'll continue to explore whether we can still load and serve VSAC 0.18.0+ for now.

But Gay has a suggestion above for a logical filtering of VSAC. Would this work for upcoming releases at least until a VSAC FHIR server is set up? For new VSAC packages it would be clear for users if they are missing a VS/CS when validating their IG.

(Or I'd welcome doing that retroactively for VSAC 0.18.0 and up too. Potentially we could run checks for all packages you know to depend on VSAC 0.18.0+ if they miss anything)

Ward Weistra2024-10-02T20:51:40Z

I'm going to investigate

Grahame Grieve2024-10-02T20:52:04Z

here's my data:

Grahame Grieve2024-10-03T11:35:49Z

we use value sets from the following stewards:

Grahame Grieve2024-10-03T11:43:50Z
  • ADVault
  • AHA
  • AHRQ CDS Connect
  • AND
  • BSeR
  • CDC NCHS
  • CSTE Steward
  • CareEvolution Steward
  • HL
  • HL7 USRPM
  • IMPAQ
  • Lantana
  • MITRE
  • NCQA
  • OPA
  • Optum
  • SAMHSA Steward
  • The Joint Commission
  • eCR
Grahame Grieve2024-10-03T11:44:12Z
Grahame Grieve2024-10-03T11:45:26Z

so @Gay Dolin's suggestion does not work

Grahame Grieve2024-10-03T11:45:40Z
Ward Weistra2024-10-03T13:43:58Z

indeed, but does that make any difference?

Grahame Grieve2024-10-03T13:46:44Z

I guess these could still be 19 separate packages. If need be, the next iteration of the VSAC package could depend on all of those.

I have no idea how many VS/CS those Stewards have in VSAC in total, but if that's a manageable amount you could include all for a Steward in such a subpackage so you don't need a new edition when someone needs one more.

hl7.fhir.us.vsac.hl7-usrpm for example.

Ward Weistra2024-10-03T13:53:33Z

or simplifer could simply allow bigger packages, which would be way easier for everyone

Grahame Grieve2024-10-03T13:54:21Z

How big are the 19 together.? I think that could be "The" package.

Gay Dolin2024-10-03T13:56:08Z

There is no need to pull in all the other sets - so many are really poorl value sets
US Realm Program mgt (US Core/C-CDA sets could REALLY take advantage of a seperate package. We possibly could then do away with depending on VSAC for the "Annual Releases" .
It would save HL7 about $40,000 a year, and ONC possibly even more

Gay Dolin2024-10-03T14:00:02Z

if people have used those 19, why would they not be allowed to use others?

Grahame Grieve2024-10-03T14:00:07Z

Generally its IG authors who are building the sets

Gay Dolin2024-10-03T14:01:42Z

There is no need to pull in all the other sets - so many are really poorl value sets

if you can get formal agreement from #terminology that no one has a valid reason to use any other other stewards, I can remove them, sure

US Realm Program mgt (US Core/C-CDA sets could REALLY take advantage of a seperate package. We possibly could then do away with depending on VSAC for the "Annual Releases" . It would save HL7 about $40,000 a year, and ONC possibly even more

I don't know anything about annual releases, but US realm could just use THO or define it's own package. I'm told that VSAC is used because it's a better authoring environment

Grahame Grieve2024-10-03T14:02:20Z

It is a better authoring environment

Gay Dolin2024-10-03T14:03:24Z

Heading into SD but will love to chat more about why this WOULD work

Gay Dolin2024-10-03T14:03:49Z

Grahame Grieve said:

if you can get formal agreement from #terminology that no one has a valid reason to use any other other stewards, I can remove them, sure

Terminology would never agree to that, as they should not. But perhaps the short term solution is using those current stewards, so publishing can get going again

Gay Dolin2024-10-03T17:14:37Z

Maybe long term solution is making simplifier bigger, but maybe each package update could still be based on: 1) IGs that have VSAC value sets 2) who are the stewards and then it will always be managable

Gay Dolin2024-10-03T17:18:56Z

If not the above, If we only pulled in value sets with status "Active" and some already published IG have sets that have flipped to "Not Maintained" - will that be problematic wrt to validation in implmentations?

Gay Dolin2024-10-03T17:20:42Z

If not - we could just pull in "active" sets - but that would still be pretty large - since VSAC now forces maintenance (https://www.nlm.nih.gov/vsac/support/authorguidelines/valuesetstatus.html) (though I'm guessing most of the "crap" value sets stewards/authors don't pay attenton to these emails that warn you your set is getting flagged as not maintained)

Gay Dolin2024-10-03T17:22:54Z

WRT the C-CDA annual release (which includes the shared US Core sets whose source of truth is VSAC), Since 2016 HL7/ONC has provided an annual release, basically to make up for the fact that all of C-CDA had not been balloted since 2015: https://vsac.nlm.nih.gov/download/ccda

Gay Dolin2024-10-03T17:26:10Z

At a cost to HL7 and ONC

Gay Dolin2024-10-03T17:26:28Z

We were hoping to get VSAC to create an ability for small releases to "push a button" and create a release, but they said "maybe we could start working on that in 2026"

Gay Dolin2024-10-03T17:28:09Z

So, @Brett Marquard and I are exploring if vendors (or vendor customers) even need a "release" and/or if we could offer it another way, hl7.fhir.us.vsac.hl7-usrpm for example. :-)

Gay Dolin2024-10-03T17:29:53Z

WRT using THO - 1) not until the authoring space gets better 2) US Core and C-CDA increasingly share sets, so we prefer the sets are either in THO or VSAC rather than in one IG or another

Gay Dolin2024-10-03T17:31:23Z

Lastly, We are working with OCL folks (OCL is all (or mostly all, and goal is to be all) FHIR based) so that maybe someday in the future, their tooling would rival VSAC authoring and it could be used in the THO space and we would not have to use VSAC at all.

Gay Dolin2024-10-03T17:34:01Z

@Grahame Grieve - I know you are familiar with OCL, but in case others are not: https://openconceptlab.org/

Gay Dolin2024-10-03T17:35:24Z

But perhaps the short term solution is using those current stewards, so publishing can get going again

this is something that has already happened - the packages are already published. There is only one short term solution, which is for simplifier to remove the size limit for at least the vsac package

Grahame Grieve2024-10-03T21:53:27Z

even if I can restrict to active only, that's for future publications

Grahame Grieve2024-10-03T21:55:39Z

here's the value sets that are used that are not actively maintained:

Grahame Grieve2024-10-03T21:57:29Z
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1032.115 (Not Maintained) @ MITRE used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1099.46 (Not Maintained) @ BSeR used by [hl7.fhir.us.bser#2.0.0-ballot]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.95 (Not Maintained) @ The Joint Commission used by [hl7.fhir.us.bser#2.0.0-ballot]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1142.10 (Not Maintained) @ SAMHSA Steward used by [ihe.iti.pcf#1.1.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1142.41 (Not Maintained) @ SAMHSA Steward used by [ihe.iti.pcf#1.1.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1142.50 (Not Maintained) @ SAMHSA Steward used by [ihe.iti.pcf#1.1.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1142.57 (Not Maintained) @ SAMHSA Steward used by [ihe.iti.pcf#1.1.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1144 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1152 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1154 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1157 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1223 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1270 (Not Maintained) @ CSTE Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1196.309 (Not Maintained) @ IMPAQ used by [hl7.fhir.us.nhsn-ade#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1196.310 (Not Maintained) @ IMPAQ used by [hl7.fhir.us.nhsn-ade#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1223.9 (Not Maintained) @ CareEvolution Steward used by [hl7.fhir.us.nhsn-med-admin#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1240.1 (Active) @ HL7 USRPM used by [hl7.cda.us.ccda#3.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.111.11.1021 (Not Maintained) @ NCQA used by [hl7.fhir.us.mihr#1.0.0]
* http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.111.12.1015 (Not Maintained) @ NCQA used by [hl7.fhir.us.mihr#1.0.0]
Grahame Grieve2024-10-03T21:57:32Z

so active only doesn't seem to be a goer either

Grahame Grieve2024-10-03T21:57:50Z

Grahame Grieve said:

so active only doesn't seem to be a goer either

OK - I thought that might be the case

Gay Dolin2024-10-03T21:59:31Z

Yunwei Wang so we’re stuck here. packages.fhir.org won’t handle the package. But packages2.fhir.org/packages handles it no problems, so people should always use the alternative server

Grahame Grieve2024-10-03T22:32:53Z

Did you forget this part or did you think I abandoned it?

Ward Weistra said:

I'll continue to explore whether we can still load and serve VSAC 0.18.0+ for now.

Ward Weistra2024-10-07T10:26:13Z

However, I would still like to keep any size exception, if at all feasible, as small as possible. So if we could switch for any next VSAC publication from one supersize VSAC package to more tailored hl7.fhir.us.vsac.hl7-usrpm per publisher that would be a great way to not make the future impact any bigger then necessary.

Ward Weistra2024-10-07T10:29:15Z
The team is seeking feedback on four potential logo designs for the IPA website, with voting due by the end of Sunday. Discussions have highlighted the need for a design that better represents themes of patient access and inclusion, with various suggestions and critiques of the current options.
28 comments

As part of the consumer and regulator-facing IPA website, we're creating a logo. We've created the following. We need to decide between them. They're not all finalized, and will be used as a design direction for further refinement. Please vote in the below poll to indicate your preference.

Option A: Globe and flame
smaller_variation_3_background_removed.png

Option B: Pixelated heart-shape with lame
own_identity_3.png

Option C: Torch as I in IPA
torch_2.webp

Option D: Hands cupping flame
hands_2.png

(Shoutout to @Andrew Fagan to creating these logo's!).

cc/ @Mikael Rinnetmäki , @Sheridan Cook , @John D'Amore , @Rob Hausam , @Brett Marquard , @Ricky Bloomfield , @Andrew Fagan , @Rashid Kolaghassi , @Vassil Peytchev , @Jason Vogt

Isaac Vetter2024-10-02T15:15:26Z

/poll Which logo should IPA adopt?
Option A: Globe and flame
Option B: Pixelated heart-shape with flame
Option C: Torch as I in IPA
Option D: Hands cupping flame

Isaac Vetter2024-10-02T15:17:34Z

A looks like a cannonball :thinking:

Jens Villadsen2024-10-02T16:23:05Z

ChatGPT images aren't as good, but I was playing around with the idea of something other than fire, since "burning earth" and "burning hands" can both be problematic. So I asked for an earth with blue/orange rings around it, implying connecting the world. The "FHIR" reference is in the color of the rings, not actual burning fire. A real artist could make something much nicer, but maybe this is a better middle ground?
DALL·E 2024-10-02 13.12.19 - A logo featuring a stylized Earth at the center, surrounded by orbiting rings similar to those of a planet. The Earth is modern and sleek in design, w.webp

Ricky Bloomfield2024-10-02T17:12:58Z

Maybe this also has less copyright risk if that's a concern.

Ricky Bloomfield2024-10-02T17:13:51Z

Jens Villadsen said:

A looks like a cannonball :thinking:

Because if it's not love,
then it's the bomb, the bomb, the bomb...
that will bring us together..

Rutt Lindström2024-10-02T17:14:49Z

by The Smiths: Ask, 1986

Kari Heinonen2024-10-02T18:49:15Z

Personally not keen on any of the four logos under vote

  • how is the idea of Patient Access part of IPA conveyed ?
  • FHIR is undeniably a "Thing" in IPA but it is not the one and only dimension to consider
  • IMO constant repeat of this FHIR inside joke is getting rather "old" and "contrived"
Kari Heinonen2024-10-02T18:57:46Z

I'm not deeply inolved in this, but I agree with @Kari Heinonen. I see no indication of "patient" or "access" in any of these. And I wonder how much FHIR is the background mechanics of patient access, rather than the headline.

That said I lean towards the torch, but worry that the "IPA" of the logo is a little anglo-centric for a spec that is supposedly "international".

Elliot Silver2024-10-02T20:12:16Z

The torch icon makes me think of the Olympic torch.

Richard Townley-O'Neill2024-10-03T00:53:27Z

Logos are hard.

Richard Townley-O'Neill2024-10-03T00:53:39Z

I love the enthusiasm and brainstorming in this thread! Please do post alternative ideas here.Please weigh in on your favorites, and issues with others.

We've got until end of day Sunday to make a decision. I'll take the best ideas to our web design firm then -- at which point we'll be locked into logo and color scheme.

Isaac Vetter2024-10-03T02:50:41Z

Ok - tried to incorporate comments so far in a design that blends what folks like about Option A, C, and D. I know we won't make everyone happy but I like the symbolism of the torch and hands ("I'm an advocate for myself in bringing my data wherever I go, and healthcare systems are there to support my journey"). Better?

Designer (6).jpeg

Sheridan Cook2024-10-03T13:38:18Z

First: too "busy" i.e. too many elements in a small package, for example I couldn't make out the hands at first glance. Second: Don't like the torch to begin with, that's for The Olympics :smile: , and I believe "hands holding earth" is not a particularly original idea, right ?

Maybe modify previous "rings around world" to include a smallish flame "in orbit" leaving multicolored "trace" behind ? So sorry, can't do actual graphical design to save my life ...

Kari Heinonen2024-10-03T13:56:31Z

maybe focus more on patient access more and international less
this stuff is hard

Richard Townley-O'Neill2024-10-04T00:16:57Z

Richard, good idea! What would that look like?

Isaac Vetter2024-10-04T03:55:31Z

༼ つ ◕_◕ ༽つ :fire:

Jens Villadsen2024-10-04T09:04:16Z

(thats a logo that everybody understands :big_smile: - a person requesting fhir )

Jens Villadsen2024-10-04T09:04:59Z

A colleague of mine suggested a theme of the patient "bringing data with them", and generated this with copilot --
image.png

Isaac Vetter2024-10-04T12:55:29Z

image.png

Thank you, Grahame! The "galactic FHIR badge" is visible now, yes?

Isaac Vetter2024-10-04T12:58:06Z

I don't think this is what you actually wanted for the second image:

image.png

Grahame Grieve2024-10-04T13:18:27Z

but wow, that's perfect for IPA...

Grahame Grieve2024-10-04T13:18:36Z

Isaac Vetter said:

A colleague of mine suggested a theme of the patient "bringing data with them", and generated this with copilot --
image.png

Looks like a vikings helmet to me

Jens Villadsen2024-10-04T14:35:53Z

How about something like this?

Screenshot 2024-10-06 at 19.21.14.png

Mikael Rinnetmäki2024-10-06T16:23:34Z

Did not want to put too much effort into it yet, but the heart is supposed to pixellate a bit...

Mikael Rinnetmäki2024-10-06T16:24:34Z

For what it's worth, in our call we discussed the torch and the prometheus aspect - which I kind of liked. Most gods think that ordinary people should not get access to FHIR, but not everyone agrees...

I'd like to perhaps explore the torch idea a bit further too. But the torch does not need to be the I of the IPA. Just a standalone symbol. And perhaps in a hand of the patient.

Mikael Rinnetmäki2024-10-06T16:27:10Z

Grahame Grieve said:

but wow, that's perfect for IPA...

I do love @Grahame Grieve's accurate and concise illustration of the current state of affairs, but I don't feel it accurately captures the full ambition and the intent of IPA...

Mikael Rinnetmäki2024-10-06T16:29:44Z

ipa-logo-hand.svg
SVG version, if anyone wants to utilize some of that.

Mikael Rinnetmäki2024-10-06T16:34:03Z
The discussion centers around the evaluation of FHIR validators for Git pipeline integration, focusing on the challenges of maintaining the HAPI FHIR validator and the need for potentially more user-friendly and customizable alternatives. Participants highlight the necessity for clear error messaging for less experienced users, while also considering the capabilities of various validators, including the Java validator and the Hammer FHIR validator.
29 comments
MM

Hi All, we are reviewing our use of a HAPI FHIR validator built into our Git pipeline, because in order to keep it up to date requires the time of a skilled developer, and as a busy team we may not always have this resource. We were considering buying an off the shelf cloud based solution like AWS HealthLake, but we're not sure if it would meet our needs, at a quick glance it looks like it is more focused on analytics than validation. Does anyone use any FHIR validators that they can recommend, that would fit easily within our Git pipeline, requires little customization, or has a good user interface, produces human readable validation reports and can work with our terminology server. The Hammer FHIR validator looks promising, utlizing the best of both worlds, running both .NET and JAVA validators side by side, but I wasn't sure if this was still experimental. I was looking for a website that would help me make a decision on this by independantly testing the FHIR validators, listing the advantages of their features and their disadvantages, does such a site exist?

John George2024-10-03T20:53:27Z

A few things to keep in mind:

  • validators continue to evolve as new edge cases are identified and as the FHIR methodology evolves or is clarified. Whether you want or don't want these new issues to be caught may vary (and may vary by type of issue). So some ongoing need for configuration is likely regardless of which tool you choose
  • validators typically rely on external terminology and package services and (though more stable than they once were), the interfaces for these can also change
  • security considerations and threats evolve in those interfaces as well as in the languages and libraries used by all of the validators.

Taken together, it means that any tool you run locally is going to have an associated maintenance (and likely configuration) requirement. Sometimes that maintenance will have to happen in very short order.

Lloyd McKenzie2024-10-03T23:54:09Z

You don’t say why the hapi validator takes a skilled developer to maintain, nor what terminology server you’re using. Nor whether you’re using the command line or you wrapped it in something

PRs are welcome, but my expectation is that any validator will require skilled maintenance.

Note that the Java FHIR validator is the most thorough validator by a long shot, and I can’t recommend to others because they don’t pass the test cases. The test cases are unfriendly so the mere fact they don’t pass isn’t necessarily a problem but I do know the others are less thorough

Grahame Grieve2024-10-04T00:57:21Z

Hi @Grahame Grieve and @Lloyd McKenzie thanks for replying. It's more of a question that we are small team of public sector employees, busy working on FHIR interoperability solutions, and updating our existing customized HAPI FHIR validator that is built into our Git pipeline (in future we were hoping to tie this to our NHS Terminology Server (Customised version of CSIRO Ontoserver technology), takes a certain amount of effort. That's why we wondered if there was an off the shelf solution that would pass the test cases mentioned make validation easier, it doesn't sound like there is, as the validator would need to be customised to our needs, of being valid against the latest or appropriate version of the UK Core, and valid against the SNOMED CT terminology we use.

I was listening to @Vadim Peretokin excellent presentation on FHIR validation at past Dev Days event, and I think he says pretty much the same as you, that the Java validator is the most battle tested validator in the FHIR eco system. @Vadim Peretokin can we use the Hammer FHIR validator in a git pipeline? Currently, we have a FHIR Validator that runs at least once a day, and will check for changes when pull requests are made.

Grahame Grieve said:

You don’t say why the hapi validator takes a skilled developer to maintain, nor what terminology server you’re using. Nor whether you’re using the command line or you wrapped it in something

PRs are welcome, but my expectation is that any validator will require skilled maintenance.

Note that the Java FHIR validator is the most thorough validator by a long shot, and I can’t recommend to others because they don’t pass the test cases. The test cases are unfriendly so the mere fact they don’t pass isn’t necessarily a problem but I do know the others are less thorough

John George2024-10-04T11:21:41Z

as the validator would need to be customised to our needs, of being valid against the latest or appropriate version of the UK Core, and valid against the SNOMED CT terminology we use.

neither of those things should require a customised validator, unless UK core isn't conformant with FHIR itself, in which case you've got a huge problem irrespective of which validator you use

Grahame Grieve2024-10-04T11:25:00Z

since hammer is a wrapper around the validator, I don't understand what it gets you in a pipeline like that?

Grahame Grieve2024-10-04T11:25:59Z

@Grahame Grieve the UK Core is conformant with the FHIR standard, but as an example, where we have constrained the Patient.identifier to use an extension, NHSNumberVerificationStatus, we would expect to see for example, where in an instance example of the where if the NHS Number is present and verified, then we would expect a validator to check that the extension is present and the code/ display value of "01" / "Number present and verified" is present in that instance example. That is the kind of custom validation that I am referring to that goes beyond the capabilities of an "out of the box" FHIR validator. For example, if someone had made a mistake in the instance example and used "02"/ "NHS Number present and verified", instead of "01" / "Number present and verified".

Regarding Hammer, I only heard about it this week, and I need to do some background reading to understand it's full capability full potential. If anyone can point to any documentation or sites, that can give advice on FHIR validators, feel free to comment.

Grahame Grieve said:

neither of those things should require a customised validator, unless UK core isn't conformant with FHIR itself, in which case you've got a huge problem irrespective of which validator you use

John George2024-10-04T15:30:41Z

the out of the box validator will validate the proper extension if the profiles you are using declare them and have constraints like you mentioned.

Jean Duteau2024-10-04T15:36:13Z

ok sure, a validator isn't going to enforce business logic like that that's not expressed anywhere, though such logic can usually be expressed using FHIRPath, and then will be enforced

Grahame Grieve2024-10-04T16:13:25Z

Hi @Jean Duteau where you mention about profiles declare an extension, is that the same as define an extension: https://www.hl7.org/fhir/defining-extensions.html ? For example , use a canonical URL that uniquely identifies the extension, specify it's context, set it's cardinality, publish and reference the extension's canonical URL that uniquely identifies the extension in the profile. We do that, it's the business rules, alongside the standard FHIR rules that we need a validator to work on,

Jean Duteau said:

the out of the box validator will validate the proper extension if the profiles you are using declare them and have constraints like you mentioned.

John George2024-10-04T16:30:42Z

There's two steps:

  1. Define the extension as a StructureDefinition and publish it in a package that's made available to the validator
  2. Define a profile on the resource you want to reference the extension and add a slice for that extension saying that the extension is required (cardinality 1..1) and adding any constraints that define other rules.
Lloyd McKenzie2024-10-04T17:13:57Z

@John George would you be using the validator during ig development in the ci-build? because as far as I see you have described the required rules already in https://simplifier.net/guide/uk-core-implementation-guide-stu2/Home/ProfilesandExtensions/Profile-UKCore-Patient?version=2.0.1 and could use that package to validate any examples by specifing the needed profile. if you could share your git pipeline requirements, that would be helpful.

Oliver Egger2024-10-06T08:05:14Z

The original post mentioned a desire to have a validator that "has a good user interface, produces human readable validation reports" - apart from a few web frontends for $validate, and Simplifier and Hammer, there are not a lot of options. "Human readable validation reports" - I don't think any of the tools support that (on the assumption that one could create human readable reports for deep validation).

René Spronk2024-10-06T08:22:58Z

John George said:

in future we were hoping to tie this to our NHS Terminology Server (Customised version of CSIRO Ontoserver technology)

Let me know what help you need and I'll make sure you get it (there isn't anything customised about the Ontoserver being used for the NHS Terminology Server so anything you can do with Ontoserver, you'll be able to do with the NHS Terminology Server)

Dougal Fleming2024-10-06T08:31:08Z

"Human readable validation reports"

what's a human readable validation report? The java validator has various output formats, one of which is html, which everyone is used to looking at in the IG publisher wrapper

But otherwise, what? It seems like not a big lift to add something to the validator for an output of what is desired, and there's already a framework for multiple outputs, so that exists

the other challenge which I'm always sweating on is how to make the messages more comprehendible

Grahame Grieve2024-10-06T09:36:55Z

I'd estimate that "99% of implementers don't use IG Publisher". Authoring an IG is only done by a very small % of the community, and one can't assume FHIR implementers to be familiar with it.

René Spronk2024-10-06T10:38:15Z

When it comes to validation, you'd want both a very precise indication where in a resource the error occurs, with a comprehensible error message for someone not terribly well versed in FHIR and strucDefs.

René Spronk2024-10-06T10:39:46Z

ok, not everyone, that's true

Grahame Grieve2024-10-06T11:02:40Z

with a comprehensible error message for someone not terribly well versed in FHIR and strucDefs.

I've given up on that. I don't know how to explain stuff. I mean, I try, but the language is rooted in the FHIR definitions, and I don't expect much from non-FHIR developers

Grahame Grieve2024-10-06T11:03:26Z

Thanks @René Spronk for your input, yes we want a validator that not only my team at NHS England can understand the error messages, but possibly in future one that can be widely used throughout the NHS, so implementors of our FHIR specification, who may not be so well versed in FHIR can easily understand an error message and pinpoint where exactly the problem is. Having many years ago, worked in a hospital on pathology messaging, I can relate to this, and it would have been useful to have a validator who messages were easy to understand, rather than escalating this to our IT supplier. I want to find out if the HAPI FHIR validator that we use along side the .NET FHIR validator in Simplifier.net is sufficient, or if there have been any recent developments in FHIR validators that may mean there are better FHIR validation solutions out there.

René Spronk said:

When it comes to validation, you'd want both a very precise indication where in a resource the error occurs, with a comprehensible error message for someone not terribly well versed in FHIR and strucDefs.

John George2024-10-06T12:51:30Z

suggestions to improve the error messages are always welcome

Grahame Grieve2024-10-06T13:22:32Z

To help to understand validation issues we are supporting a student project at the Bern University of Applied Sciences, who are trying to determine with the help of a LLM what the underlying problem is based on the error messages from the Java validator/matchbox and how it could be rectified. The background is that there can be a lot of follow up warnings/errors with specific FHIR documents due to the slicing, and we want to find out whether LLM can make a direct recommendation on what needs to be corrected.

Oliver Egger2024-10-06T13:25:33Z

slicing is particularly difficult, yes

Grahame Grieve2024-10-06T13:37:44Z

Despite best efforts, messages will never be perfectly easy to understand, by everyone.
As well as making them as simple as is practical, perhaps a link to an online FAQ could be given, which could spell out some common explanations (e.g. what a slice is). Also the FAQ can give a link to Zulip, as a last recourse. We don't want to replace an automated tool with humans, but, otoh, it is always good to get people into the community.

Rik Smithies2024-10-06T16:39:23Z

well, Rik, there's only 1152 messages that validator can produce :grinning:

Grahame Grieve2024-10-07T01:12:23Z

Grahame Grieve said:

suggestions to improve the error messages are always welcome

For grouping of bulk FHIR Validation results like we do by https://git.uni-greifswald.de/CURDM/Bulk-FHIR-Validation/src/branch/main/README.md IMHO it would help to have (the main part of) error messages additionally/structured (maybe extension) without the used code / only on codesystem level, since in some cases while bulk validation too many different but roughly the same error messages (for each used code of a codesystem if many different values like ICD codes from many validated resources) which i sometimes group for a FHIR element to one single/aggregated error for the whole code system (at the moment by removing the code from message by regex, which could fail if the validators messages/output format will change).

Markus Mandalka2024-10-07T10:07:14Z

that actually sounds like a suggestion to not change the messages!

Grahame Grieve2024-10-07T10:09:09Z

maybe giving you message id will make it easier? But how can I remove the code from the message? That doesn't sound like a useful thing to do

Grahame Grieve2024-10-07T10:09:48Z

To change messages to improve / to understand them better is very good. To remove the code genarally would be very bad (it helps and i want to see it very often). :)

Just wanted to mention, it would be good to be able to not use it/remove it for some (not all) further analysis.

So if no additional/separate $validate operation outcome element for the message without the code available, it would help to have as possible stable output patterns to be able detect/separate/extract the codesystem and code parts of the output string.

Markus Mandalka2024-10-07T10:27:43Z
Nina Haffer inquired about the possibility of capturing right or wrong answers in a questionnaire, particularly using extensions in the answerOption element. The discussion concluded that creating a reference to a specific Questionnaire resource (QR) for correct answers might be the best approach, while considering various ways to assess responses while maintaining security and privacy.
24 comments
NH
IB
JS

Hi there,
We use multiple choice questions in Questionnaires and want to specify whether an answer is right or wrong. Is it possible to use an extension for this on the answerOption element? Or do I capture if an answer is right or wrong outside of the Questionnaire resource? Thank you for your time!

Nina Haffer2023-03-21T16:27:30Z

It seems like a reasonable requirement for a new standard extension. Would you be willing to submit a change request?

Lloyd McKenzie2023-03-21T18:10:49Z

This sure is an interesting one. Including the "correct" answer in the definition could make "cheating" easier if one had access to the definition, and something that might want to be considered to be in a derived definition.

Brian Postlethwaite2023-03-21T20:47:27Z

@Brian Postlethwaite I think the idea is that the correct answers are separate from the Questionnaire, but someone who has the answers is marking the user's answers right or wrong.

Paul Lynch2023-03-21T22:04:10Z

The correct answers could be a reference to a specific QR...

Brian Postlethwaite2023-03-21T22:05:14Z

Then security can take care of the privacy part easier, and also works for all question types. Otherwise extension could be any of the answer types. Lots to consider here.

Brian Postlethwaite2023-03-21T22:06:15Z

That might actually be a better option - it would work for more than just multiple-choice.

Lloyd McKenzie2023-03-21T22:06:47Z

For long text answers, you could even list the key points that should be covered and the marks to be awarded for each.

Lloyd McKenzie2023-03-21T22:07:31Z

I also agree that a QR is a better option. The QR will contain points for a specific answer (option of an answer)
I can experiment with the PHQ2PHQ9 questionnaire and implement scoring calculations based on this new approach.

Ilya Beda2023-03-22T06:55:05Z

@Nina Haffer
Is it possible to provide a more specific example? How would you like to use this feature?

Ilya Beda2023-03-22T06:56:01Z
{
  "resourceType": "Questionnaire",
  "id": "Questionnaireexample",
  "title": "Acromioclavicular joint",
  "status": "draft",
  "item": [
    {
      "text": "The articulatio acromioclavicularis (acromioclavicular joint, ACG) is",
      "type": "choice",
      "linkId": "2131623898461",
      "answerOption": [
        {
          "valueString": "morphologically and functionally a ball and socket joint"
        },
        {
          "valueString": "morphologically and functionally a planar joint"
        }
      ]
    }
  ]
}

@Ilya Beda Hi, here is a minimal example of what I am trying to achieve. The right answer would be "morphologically and functionally a planar joint".

Nina Haffer2023-03-22T08:20:52Z

Brian Postlethwaite said:

The correct answers could be a reference to a specific QR...

Thanks @Brian Postlethwaite I like that idea. Will check it out! How would I define the QR instance with the right answer set as "the perfect one"?

Nina Haffer2023-03-22T08:27:44Z

For now just create an extension of type reference to the QR in the questuonnaire.

Brian Postlethwaite2023-03-22T08:34:46Z

And submit a change request to get us to define a 'standard' extension :)

Lloyd McKenzie2023-03-22T16:18:53Z
Julian Sass2023-05-08T16:35:54Z

While defining this extension we considered some other issues that may arise while doing this type of response evaluation for an "exam" or "academic" test. Anyone got better wording for this where it's describing this type "knowledge based" vs normal scoring?

Brian Postlethwaite2023-07-13T21:44:04Z

Also, would we want to have guidance (via some other extension) on other options that are considered incorrect.
So that you could provide feedback to the test taker why their result was right/wrong.
e.g. you selected A, but this was incorrect because blah.
e.g.2 you selected B, this is not correct because abc
e.g.3 you selected C, this is correct for reasons x,yy and Z.

Alternately you might just have a generic response.
e.g. A is incorrect due to blah, B is incorrect due to blah, C is correct for reasons x/y/z
The former style allows provide different text depending on what responses they gave.

Also interested if there is any interest in providing scoring (optionally with weights) for these tests over and above the actual "correct" answer?
Should there be some style for text based questions apart from exact answers?
(something that an AI might be able to check against the response?)

Brian Postlethwaite2023-07-13T22:08:28Z

On the SDC call today we also considered some of these thoughts and if that style of information would live alongside the AnswerKey QR, or in a derived questionnaire that adds the extra metadata for test assessment.

Brian Postlethwaite2023-07-13T22:09:49Z

And if using fhirpath expression(s) would be appropriate for some of this:

  • To calculate a score
  • To determine if answer is correct
  • To provide specific feedback on some responses
Brian Postlethwaite2023-07-13T22:11:00Z

I've created samples to try this out using chatGPT to help draft the content!
https://fhir.forms-lab.com/Questionnaire/trivia-questionnaire
https://fhir.forms-lab.com/QuestionnaireResponse/trivia-response

Here's the conversation if that's of interest to others...
https://github.com/brianpos/fhirpath-lab/blob/develop/fhirpath-ai/sample-conversations/create%20sample%20general%20knowledge%20questionnaire.md
(I used the chatgpt hosted in the fhirpath-lab to be able to iterate more quickly too while testing - shameless plug)

Brian Postlethwaite2024-09-12T01:40:05Z

And this other one that shows the annotations for the answers - note that I've used markdown rather than string or annotation as the datatype to permit formatted content - which seemed to make more sense in providing structured detail/highlighting.
https://fhir.forms-lab.com/QuestionnaireResponse/trivia-response-answer-key

Brian Postlethwaite2024-09-12T01:44:58Z

Having thought about this some more, I think that adding some complex extensions into the QR would be better than breaking the Q/QR validation set.
something along the lines of:

alternateAnswerValue: 0..1 valueX // a possible answer that could be used (doesn't imply it is correct - may help with partial scoring)
alternateAnswerExpression: 0..1 expression // a fhirpath expression that can be used to evaluate if this "answer rule" is the appropriate one to select - an alternative to using the alternateAnswer which is exact
correct: 0..1 boolean // true this answer could also be considered correct alternative
score: 0..1 decimal // if the answer has a specific weighted score for it
calculatedScore: expression // if the anwer has a specific weighted score for it, but needs to be calculated - this can refer to other variables in the questionnaire - though not sure how this could work - would need to be able to embed variables for other scores?
additionalFeedback: markdown // specific feedback on this answer. - also equivalent to the `http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-item-answerAssessment` that we've already proposed

Note: the alternateAnswerValue/Expression could be optional if the item.answer is the only applicable one.

Brian Postlethwaite2024-09-12T01:56:42Z

@Josh Mandel pointed out that we haven't noted where an actual test assessment result would go, along with their score.

Brian Postlethwaite2024-09-12T02:34:53Z

Brian Postlethwaite said:

Josh Mandel pointed out that we haven't noted where an actual test assessment result would go, along with their score.

True, though that was not a part of the original request. I think we would need to hear whether that is needed before defining something.

Paul Lynch2024-10-04T14:45:19Z
The discussion centered around generating Java data models for FHIR profiles, highlighting existing tools and their limitations, such as issues with code generation for profiled datatypes and field name sanitization. Participants agreed on the importance of addressing these challenges and expressed enthusiasm for further community development efforts in this area.
19 comments

What is the latest on the story of generating Java data models for profiles?

(I checked fhir-codegen but I see it has this issue)

Vadim Peretokin2024-10-04T11:53:28Z
Jens Villadsen2024-10-04T15:35:39Z

@Vadim Peretokin I might have a colleague that would like to pitch in some effort

Jens Villadsen2024-10-05T07:40:10Z

To the MS codegen project

Jens Villadsen2024-10-05T07:40:28Z

works, but there's some open issues with it

Grahame Grieve2024-10-05T08:34:01Z

What are those?

Vadim Peretokin2024-10-05T12:05:25Z

don't remember :-(

Grahame Grieve2024-10-05T13:10:25Z

@Grahame Grieve and this class here https://github.com/hapifhir/org.hl7.fhir.core/blob/master/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/profiles/PETests.java illustrates how it can be used, correct? It isn't wrapped in any executable or something like that already, right?

Jens Villadsen2024-10-05T15:25:32Z

that tests out the underlying engine.

Grahame Grieve2024-10-06T00:37:23Z

I don't think it tests out the generated code itself

Grahame Grieve2024-10-06T00:37:41Z

This is a great start!

I've played around with the code generation and found the following issues, sorted in priority:

  1. does not generate code for profiled FHIR datatypes (blocker for some implementations)
  2. doesn't sanitize field names, e.g. generates field names with dashes in them
  3. polymorphic types not supported
  4. generates code for r5 always even when running in r4 mode
  5. field comments are the profile description instead of field descriptions

Would you like me to file them so we can keep track? Both me and @Jens Villadsen agree this is something worth developing further, perhaps we can get some community traction on this :)

Vadim Peretokin2024-10-06T16:40:09Z

This is gonna be a fun ride!

Jens Villadsen2024-10-06T16:42:12Z
  1. Is it intentional that the generated classes do extend e.g. org.hl7.fhir.r4.model.Resource ?
  2. It doesn't seem like the ca.uhn.fhir.model.api.annotation.* are used in the generated results.
Jens Villadsen2024-10-06T20:12:51Z
  1. @Vadim Peretokin my observation in regarding 1) - I can get it to generate it, but the end result does not extend the actual datatype being extended :thinking: ?
Jens Villadsen2024-10-06T20:20:17Z
  1. Don't understand - it does, and the test case has data type profiles
  2. oops. Someone will have to fix that in the PEModel - I'll try and get to it
  3. example?
Grahame Grieve2024-10-07T01:13:31Z
  1. oh. Someone will have to fix that too
  2. example?
  3. I think so. It relates to how the generated classes fit into the HAPI framework
  4. which annotations do you care about?
  5. it's not ever going to be 'extend' - the generated code is a facade to the underlying type, not a specialization
Grahame Grieve2024-10-07T01:15:14Z

6 missed a 'not'. But you explained it in 8, so nvm

Jens Villadsen2024-10-07T06:34:14Z
The chat discusses guidelines for using contained resources in FHIR, emphasizing that they should be used when resource identification is insufficient or unclear, as creating a full resource may introduce unnecessary complexity. Participants shared scenarios, highlighting that contained resources are appropriate for transient or less detailed information, while full resources are preferred when sufficient detail and a lifecycle management are available.
12 comments

Hello - when is it appropriate to use contained resources vs. creating a full resource? Is there any guidance on when to use contained resources. I see this in the description comments for the 'contained' data element on each resource: "This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again"

Can anyone share example scenarios of when they used contained resources vs. creating a full resource?

Thanks!

Angie Benoit2024-09-24T15:50:13Z

a typical scenario for using a contained resource is when converting from v2 or CDA to FHIR, and the only information you have for the Practitioner details is 'Mr John Smith' - you don't know which john smith. This is unidentified, and therefore you have to use contained resources

Grahame Grieve2024-09-24T16:01:16Z

iif you don't have to, you shouldn't

Grahame Grieve2024-09-24T16:01:28Z

when you don't have sufficient detail to fill out that resource usefully or causing noise. In my case I am decomposing a lab result, I have the various lab measurement types and values; but I don't have any business identifier to keep me from generating alot of duplicate Observations data. Thus it is saved as a contained Observation within the DiagnosticReport, as I do have a business identifier of the lab report.

John Moehrke2024-09-24T16:10:00Z

I don't wish to confuse things, but if all you know is the single data point "Mr John Smith" (as a string) isn't that suitable for putting in reference.display, and not need a contained? I think that is a legitimate use. If you know another data point (e.g. phone), then that would require contained.

Rik Smithies2024-09-24T16:13:40Z

I always use the maxim of "does the resource have a lifecycle of its own? then don't put it as a contained resource."

Many implementers and IG authors use contained as a way to get around the FHIR reference mechanism. If you manage a resource's state and have an id for it, it should not be contained.

Jean Duteau2024-09-24T16:27:02Z

One thing I've heard on here is, using a contained questionnaire on a questionnaireresponse resource to indicate the questions as they were when answered.

Daniel Venton2024-09-24T17:06:53Z

The QuestionnaireResponse.item.text already does that. The only use case I’m aware of for contained Questionnaires is for adaptive forms where the Questionnaire is built on the fly for that specific response

Lloyd McKenzie2024-09-24T17:35:35Z

There are some resources - like Location, that require only 'name', which could be anything. Seems like this would definitely be a candidate for a contained resource. I have not seen these in the wild yet, so not sure what will be populated in them. But I question how useful they are as stand alone resources.

Angie Benoit2024-09-24T18:51:06Z

Similar discussion with some other use cases here: #IPS > Contained vs Referenced Resources in a document Bundle

Marc de Graauw2024-09-24T18:56:01Z
Richard Townley-O'Neill2024-10-03T07:17:58Z
Richard Townley-O'Neill2024-10-03T07:18:29Z
Participants discussed the challenge of communicating the number of entries in a FHIR Bundle of type collection, noting that while software can count entries, a human-readable total would be beneficial. There was debate about the appropriateness of using the Bundle.count field versus the Bundle.total field, with concerns about maintaining consistency and the normative nature of these resources.
13 comments
CM

Do folks have suggestions on how to communicate the number of entries in a Bundle of type collection? For some reason Bundle.total is not allowed for type=collection, and since Bundle is based on Resource instead of DomainResource, top-level extensions are not allowed.

Cooper Thompson2024-10-02T15:48:07Z

Why do you need a field to hold number of resources in bundle, when you can do a count(entries)?

Daniel Venton2024-10-02T15:49:33Z

Software can easily count. Having a total is very useful for humans.

Cooper Thompson2024-10-02T15:53:10Z

But let me flip it around on you: why must we prevent the use of Bundle.total, given that it exists in the resource?

Cooper Thompson2024-10-02T15:53:43Z

FHIR-48485 for the future. But still interested in suggestions for R4 era.

Cooper Thompson2024-10-02T15:54:25Z

I see the usage of total in a search. It provides a data point not otherwise discoverable via the data in the bundle. (total number of matches of the query.)
I don't know why it was prohibited in non-search bundles. Maybe because the definition of the value becomes fluid? Would you say the total in a collection is just the primary (clinical) resources or primary + directory (practitioner) resources? In a composition does the composition resource itself participate in the total?

I'm not so sure that, outside of software developers, fhir technologists, that there are many humans that read the raw fhir.

Daniel Venton2024-10-02T16:07:27Z

Bundle.total doesn't say "how many are in the Bundle", it says "how many results are in the search set". If software has the Bundle, it can count how many entries are in the Bundle itself.

Lloyd McKenzie2024-10-02T16:49:06Z

When you have a collection Bundle, you always have all of the entries. There's no mechanism to return a 'part' of a collection.

Lloyd McKenzie2024-10-02T16:49:30Z

I'm with you @Cooper Thompson .
We have other things meant to help humans like Resource narratives - which actually make it harder for this human to read FHIR, in addition to throwing me constant unnecessary validator warnings ;)

Bundle.count seems potentially useful in contexts outside of search - I fail to see the need for a constraint preventing its usage.

As an aside, in my experience most servers only fill in Bundle.count for searches where the bundle contains the complete result anyway. It's expensive for most implementations to calculate the total count for searches that require paging, and most that I've worked with don't do so.

Craig McClendon2024-10-02T17:04:00Z

Bundle.count does not indicate how many records are in the Bundle. We don't want the meaning of it to change for different types of Bundles. Also, this is a normative resource.

Lloyd McKenzie2024-10-02T17:05:15Z

It's a bit unfortunate, though.
We can't use it to know the total search-set size when they don't fit inside the bundle, because most servers don't calculate it.
We can't use it to tell you how many resources are in the actual Bundle.
It's kind of rendered effectively useless.
But it is, as you say, normative - so not much to be done I suppose.

Craig McClendon2024-10-02T17:10:06Z

.. hindsight and all

Craig McClendon2024-10-02T17:11:03Z

It should never be necessary to say how many resources are in the Bundle - you've got the Bundle and you can count. Letting you send a count separately is just an opportunity for inconsistency.

Lloyd McKenzie2024-10-02T17:59:52Z
Khumbo Lihonga proposes using a show/hide approach for options in questionnaires, instead of enabling/disabling them, particularly to prevent irrelevant options from being visible. The discussion reveals confusion about existing extensions for this functionality, with suggestions to log a ticket for a new extension if necessary.
12 comments
KL

In our project, we want to use this expression in our questionnaires but our intended implementation is slightly different. Instead of enabling/disabling the options as per the documentation, it would be preferable to show/hide the options instead. We feel that if a user shouldn't select an option (e.g. pregnancy options for a male patient) then they shouldn't have to see it. If we can't use this expression, what's the best way to go about this?

Khumbo Lihonga2023-05-24T15:38:41Z

You could use answerExpression to change the list options based on an expression.

Paul Lynch2023-05-24T16:45:27Z

The spec isn't clear whether "disabled" means hidden or merely greyed out. It might be cleanest to have an extension that indicates which of those two behaviors you want for disabled items and answers.

Lloyd McKenzie2023-05-24T18:08:35Z

I thought we already had an extension for this, but I can't see it.
So yes I'd support that.

Brian Postlethwaite2023-05-24T19:29:23Z

I thought we did too but couldn't find it either...

Lloyd McKenzie2023-05-24T19:53:24Z

I thought I saw that a week or two ago (but only for items), but I'm having trouble finding it now.

Paul Lynch2023-05-25T16:53:43Z

Thank you for your quick responses. I'm not sure I'm aware of this extension either but if a new extension is needed, what is the process to get that done?

Khumbo Lihonga2023-05-26T08:34:59Z

Log a ticket in jira, there's a link at the bottom of each page in the spec.
sdc is the guide to log out against.

Brian Postlethwaite2023-05-26T09:51:12Z

I think I was thinking of Questionnaire.item.disabledDisplay (new in R5), but that doesn't help with answerOptions.

Paul Lynch2023-05-26T18:52:11Z

Ah. I couldn't find because I thought it was an extension. Yes, that's it. We could just update the various 'enable' extensions (enableOneExpression, enableOption) to say that they're governed by that same element. I don't know that there'd be a need to have behavior that's different on the appearance of the element vs. appearance of answer choices within the element?

Lloyd McKenzie2023-05-26T20:50:46Z

have we added the extension about whether to hide/show or enable/disable the options?

Fikri Milano2024-10-02T06:00:20Z
Sanjaai is experiencing an issue with the FHIR JavaScript client that omits trailing zeros when displaying decimal values, which clinicians want to see in the UI. Despite not being able to modify the backend API, Sanjaai suggested reading the decimal values as strings to preserve precision, then converting them to numbers with the correct formatting.
9 comments
S

I’m having an issue with FHIR JS client when interpreting decimals, it omits trailing zeros. However the clinicians want to see it with trailing zeros in the UI.
Issue happens with valueQuantity type in observation. Any trailing zeros returned by the FHIR API will be removed by the Java script front-end when displaying

"valueQuantity": {
                            "value": 0.10,
                            "comparator": "<",
                            "unit": "IU/mL"
                        },
Will be displayed as 0.1
Just wondering anyone has a workaround for this.

Sanjaai2024-09-12T03:13:36Z

have you looked at the note in the json page about javascript?

Grahame Grieve2024-09-12T03:38:02Z
Grahame Grieve2024-09-12T03:38:23Z

And assumedly using the Precision Extension?

John Silva2024-09-12T16:08:20Z

Thanks @Grahame Grieve @John Silva , while i dont have the ability to change the backend API to add the extension, is there way the fhir.js client can implicitly handle this scenario or any example of using https://github.com/jtobey/javascript-bignum library in this case as noted in the page?

Sanjaai2024-09-13T03:23:44Z

If it's just the clinicians wanting to see a value presented with a certain number of decimals, the front-end can just use value.toFixed(2), right?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

Mikael Rinnetmäki2024-10-02T19:25:04Z

It's not about always showing 2 positions.
.1 means .1 +/- .05
.10 means .10 +/- .005
.100 means .100 +/- .0005

yes .1 == .10 == .100 but the "how accurate" the measurement is, is different.
if the original value was .100000000 then .1 +/- .05 is a lot different than .100000000 +/- .0000000005

Daniel Venton2024-10-02T19:43:50Z

@Daniel Venton is correct, the precision is not always going to be 2. However I ended up suggesting the following to the team.

Sanjaai2024-10-03T03:47:19Z
  1. Instead of trying to read as a JSON object, read it as a string from the backend API.
  2. Identify valuequantity.value and read it to a temp storage. this way you can get the string version of the number with right decimals points
  3. then convert the full response to JSON object, it will lose the precision at this point, however using the value read in step 2, i can set the value to right precision when converting to a number.
Sanjaai2024-10-03T03:52:19Z
Agenda for Today's Meeting
#analytics on FHIR
The agenda for today's meeting includes reviewing progress on various topics, addressing outstanding items for Milestone 1, and discussing the organization's registration status as volunteers. Key participants will share updates on ongoing projects and preparations for upcoming events.
9 comments
AS

https://zoom.us/j/94516094652?pwd=Sk01NzBiMDdSTjRoSVFYemFYWlFiUT09
Meeting ID: 945 1609 4652
Passcode: 215929

Agenda:

Arjun Sanyal2024-05-28T18:09:27Z

Agenda for today's meeting:

  • Review progress on TODOs: optional keyword, update testing page, example collection, open type for constants?, FCP process
  • Functional model in spec
  • FHIR Analytics Mini-conf: contributions
Arjun Sanyal2024-08-06T16:17:14Z

I had a chance to review the FHIR Community Process Requirements v1 document which looks like the most current official source and agree with @John Grimes 🐙 from our last call that the requirements would not be difficult for us to meet.

The main non-tactical question I have is around the concept of "FCP Participant".

The reqs state that any entity including "individual" can become a participant (FCP101) and also states that "any registration information e.g. business/company registration details" (FCP102) shall be provided.

Since we are currently organized as a loose group of volunteers (some of whom work for companies with commercial interests) what should be our form of organization?

Is it recommended or required our group "register" in some sense?

Let's discuss on the call today. Thx!

cc: @Josh Mandel @Grahame Grieve

Arjun Sanyal2024-08-06T17:48:49Z

Zoom link:

https://zoom.us/j/94516094652?pwd=Sk01NzBiMDdSTjRoSVFYemFYWlFiUT09
Meeting ID: 945 1609 4652
Passcode: 215929

Arjun Sanyal2024-08-06T17:49:57Z

Sorry guys, I will skip today meeting

Nikolai Ryzhikov 🐬2024-08-06T18:32:36Z

Possible agenda for today's meeting:

  • Brief updates on spec todos
  • Constants discussion
  • Carl's OMOP topics
  • [your agenda item here]
Arjun Sanyal2024-08-13T16:50:17Z

We will also have @Kiran Ayyagari dropping in to tell us about Safhire.

John Grimes 🐙2024-08-13T18:52:54Z

Agenda for today's call (3pm ET)

  • review outstanding items to finalize Milestone 1
    • qa issues
    • publishing logistics
    • release announcement and publicity
  • review outstanding items for event
    • event site
    • order preferences
    • help with talks, slides, demos
  • subgroup organization / next steps

Zoom link:
https://zoom.us/j/94516094652?pwd=Sk01NzBiMDdSTjRoSVFYemFYWlFiUT09
Meeting ID: 945 1609 4652
Passcode: 215929

Arjun Sanyal2024-10-01T15:48:18Z

During a review noted a couple of typos with case on Resource type.
https://github.com/FHIR/sql-on-fhir-v2/pull/262

Brian Postlethwaite2024-10-01T22:55:22Z
Paul Swarts reports an issue with the questionnaire-maxOccurs rule while validating a FHIR Questionnaire, receiving an error that the extension is not allowed when attempting to set an optional question with a maximum of two answers. Brian Postlethwaite suggests that the invariant may be context-specific and mentions using his own validator, offering to investigate further after observing the rule's visibility in the JSON/XML formats.
9 comments
PS

When I have the following questionnaire

{
    "item": [{
        "answerOption": [
            {
                "valueString": "a"
            },
            {
                "valueString": "b"
            },
            {
                "valueString": "c"
            }
        ],
        "extension" : [
            {
                "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-maxOccurs",
                "valueInteger": 2
            }
        ],
        "id": "checklistquestion",
        "linkId": "checklistquestion",
        "repeats": true,
        "text": "Checklist question",
        "type": "string"
    }],
    "name": "Questionnaire",
    "resourceType": "Questionnaire",
    "status": "active",
    "title": "Questionnaire",
    "version": "1.0"
}

And run the FHIR validator
java -jar validator_cli.jar -output-style compact maxoccurs.json

I get the following error
[2, 6] Questionnaire.item[0]: Error - The extension http://hl7.org/fhir/StructureDefinition/questionnaire-maxOccurs is not allowed to be used at this point (based on context invariant 'type!='display' and (required=true or (required.value.empty() and required.extension.exists()))')

This can be resolved by setting required to true, however I want to make this question optional and restrict the max number of answers to 2.

How can I fix this?

Paul Swarts2024-09-30T08:06:22Z

That invariant is on that extension, I'd say there is something else going on.
It validates fine in my system that checks SDC.

Brian Postlethwaite2024-09-30T15:19:29Z

https://fhirpath-lab.com/Questionnaire/tester
Paste in your json and click the validate button. (document icon with tick on it in yhe corner)

Brian Postlethwaite2024-09-30T15:20:41Z

@Brian Postlethwaite thank you for your reply.

Which library/config do you use for validation inside fhirpath-lab.com?

I used the downloaded validator from https://confluence.hl7.org/display/FHIR/Using+the+FHIR+Validator#UsingtheFHIRValidator-Downloadingthevalidator And with https://validator.fhir.org/ I get also the error
image.png

Paul Swarts2024-10-01T06:44:52Z

My own validator.
I also manually checked that extension and couldn't see that rule in it.

Brian Postlethwaite2024-10-01T13:31:52Z

I'll recheck that again.

Brian Postlethwaite2024-10-01T13:32:05Z

Wow, I must have missed that when I looked the other day. It's only visible in the json/xml and not on the other pages.

Brian Postlethwaite2024-10-01T13:36:25Z

Can you log that and we'll get it fixed.

Brian Postlethwaite2024-10-01T13:36:46Z

Thank you Brian. I created a ticket: https://jira.hl7.org/browse/FHIR-48468

Paul Swarts2024-10-01T14:41:26Z
In a discussion about how to represent laboratory test results in FHIR, two perspectives emerged: one suggesting the use of Observations for individual results and grouping them, while the other advocated using DiagnosticReport, as per established implementation guides. Craig McClendon emphasized following these guides for clarity, while others noted complexities and varying practices among different lab vendors.
7 comments
CM

In my workplace, we are facing disagreements on how to represent laboratory test results. One view suggests it is more coherent to use only Observations, and for complex tests (panels), group these singular Observations into a larger Observation. The other perspective, observed in several well-known implementation guides like US CORE and HL7 Europe Laboratory, always uses DiagnosticReport to represent the results, referencing Observations for the laboratory data. What would be the best interpretation of the data in this domain?

Daniel Nogueira da Costa2024-10-01T21:01:38Z

This is documented here: https://build.fhir.org/observation.html#obsgrouping - but the short answer is, follow the implementation guides and use DiagnosticReport to represent the lab report, Observations for the individual results.

Craig McClendon2024-10-01T22:12:00Z

Craig McClendon said:

This is documented here: https://build.fhir.org/observation.html#obsgrouping - but the short answer is, follow the implementation guides and use DiagnosticReport to represent the lab report, Observations for the individual results.

Always a Observatio (laboratory report) will be reference by a DiagnosticReport?

Daniel Nogueira da Costa2024-10-02T12:35:48Z
Daniel Nogueira da Costa2024-10-02T12:38:06Z

Always is a very strong word. I'll go out on a limb and say no, not always, under every condition, from every lab vendor, passed though who knows how many translation layers before you retrieved the observation resource.

Daniel Venton2024-10-02T13:40:32Z

The idea of the DiagnosticReport resource is to represent and convey a laboratory or other diagnostic report, with the report results themselves represented by one or more Observation resources (which can be "nested" using hasMember, when that is needed). It's not necessarily not quite as simple as that sounds, though, and there are different approaches and ideas about how best to handle some of the use cases - particularly when we are dealing with observation panels of various types. Some of the things to consider are, particularly for the "complex" results, what code(s) are appropriate to be used at the DiagnosticReport vs. the Observation resource(s) level, can/should you have nested DiagnosticReport resources (currently the answer is no), is it possible/sensible to include multiple DiagnosticReport resources in a single report "bundle"? Those are just some of the prime examples. There are a number of questions that we are working through in the OO WG, particularly in the context of the universal FHIR Laboratory Report IG ballot reconciliation.

Rob Hausam2024-10-02T21:11:46Z

Thank you for all the answers, they were very helpful for a better understanding of the context.

Daniel Nogueira da Costa2024-10-04T18:58:10Z
Fikri Milano inquires about using FHIRPath expressions to determine when an item is readOnly based on specific conditions, while Lloyd McKenzie confirms that the readOnly attribute primarily influences user capabilities and refers to the existing cqf-expression extension for dynamic functionality. Brian Postlethwaite adds that renderer support is also necessary, and Fikri acknowledges the solution with gratitude.
6 comments
BM

Would it be possible to have item.readOnly to also be calculable using FHIRPath expression?

A field can become readOnly if certain fields are answered / not answered / a condition from FHIRPath calculation which can have several variable extensions interacting with each other were met (https://jira.hl7.org/browse/FHIR-48466).

Fikri Milano2024-10-01T08:59:24Z

@Benjamin Mwalimu @Jing Tang

Fikri Milano2024-10-01T09:21:42Z

Yes. readOnly affects what a user can do. It doesn't affect what the form filler software can do. (If you think that needs clarification, feel free to submit a change request.) There's already a standard extension (cqf-expression) you can use on readOnly to make it dynamic - look at the SDC profile here

Lloyd McKenzie2024-10-01T14:58:00Z

@Aurangzaib Umer Check this out

Benjamin Mwalimu2024-10-01T15:30:02Z

Then renderer needs to support it to.

Brian Postlethwaite2024-10-01T15:50:16Z

@Lloyd McKenzie You're right, we'll use cqf-expression then, thank you!
Screen Shot 2024-10-02 at 05.27.16.png

Fikri Milano2024-10-01T22:26:39Z
The joint IPA-IPS session is ongoing in Dogwood B, with a recorded Zoom link provided. Some attendees, including Mikael Rinnetmäki, are experiencing audio issues, which John D'Amore attributes to a conflict between Bluetooth and computer audio settings.
6 comments

The joint IPA-IPS breakout is going on in Dogwood B. We will have a recorded Zoom session: https://us06web.zoom.us/j/83516290904?pwd=xuEb5qxwJVxUZ3LxD3fKMOpYvYIEvu.1

John D'Amore2024-09-21T17:12:11Z
John D'Amore2024-09-21T18:54:45Z

I tried watching the recording and was able to see it, but can't seem to get the audio to play. Is it just me?

Mikael Rinnetmäki2024-10-02T07:37:13Z

Mikael Rinnetmäki said:

I tried watching the recording and was able to see it, but can't seem to get the audio to play. Is it just me?

You are not alone :smile: https://chat.fhir.org/#narrow/stream/207835-IPS/topic/FHIR.20Connectathon.2037.20-.20Running.20topics/near/471999456

Kari Heinonen2024-10-02T07:47:24Z

I apologize. My zoom was having issues (I figure out that audio was being dual connected to computer and bluetooth was causing conflict). I haven't taken down the link since you can read some of the subtitles but agree it's very hard to follow.

John D'Amore2024-10-02T13:02:07Z

OK, thanks!

Mikael Rinnetmäki2024-10-02T18:58:28Z
Ardon Toonstra inquired about creating a datatype profile for CodeableConcept that binds directly at the CodeableConcept level instead of at the coding level, which Grahame Grieve suggested might be possible. Chris Moesel confirmed that while it can be done using FSH with caret syntax, there are limitations in tools like Forge and SUSHI regarding binding at the root level.
5 comments

I would like to create a datatype profile on the CodeableConcept datatype that includes a binding on CodeableConcept level itself, not the .coding. This would prevent me from having to add the binding in the profile that will use this CodeableConcept profile.

Is this (or should this be) possible?

Ardon Toonstra2024-10-01T07:11:19Z

I think so

Grahame Grieve2024-10-01T09:40:31Z

I can't add the binding within Forge on the root of the CodeableConcept , also don't seem to be able to do this with FSH.

Ardon Toonstra2024-10-01T12:57:34Z

You can do it in FSH, but you need to drop into the caret syntax to do it:

Profile: MyBoundCodeableConcept
Parent: CodeableConcept
* . ^binding.strength = #required
* . ^binding.valueSet = Canonical(MyValueSet)

Ideally, it would be nice if you could say * . from MyValueSet inside the CodeableConcept profile, but it seems SUSHI does not like that, probably because the root element does not have a type.

Chris Moesel2024-10-01T13:17:30Z

@Chris Moesel thanks. That seems to work.
@Ward Weistra we should perhaps deep dive into why this is not supported by Forge.

Ardon Toonstra2024-10-01T15:31:52Z
Lei Zhou is encountering an error while trying to use the launch context in Hapi version 7.4.3 with a Questionnaire resource, receiving issues related to unresolved identifiers for patient data. Brenin Rhodes confirmed that a bug related to this problem will be fixed in the upcoming November release of the Clinical Reasoning module.
5 comments

Set up:

  • Hapi version: 7.4.3
  • hapi.fhir.cr.enabled: true

given a Questionnaire resource stored as at the bottom,
send a post request to http://localhost:4004/fhir/Questionnaire/11
with the following payload, get error message as following the payload below. Thanks in advance for the help!

{
    "resourceType": "Parameters",
    "id": "example",
    "parameter": [
      {
        "name": "subject",
        "valueString": "07e2c163-71f6-46f1-99d5-d43c1a002cf2"
      },
      {
        "name": "local",
        "valueBoolean": true
      },
      {
        "name": "context",
        "part": [
            {"name": "name",
             "valueString": "patient"},
            {"name": "content",
             "valueReference": {
                "reference": "Patient/07e2c163-71f6-46f1-99d5-d43c1a002cf2"
             }}
        ]
      }
    ]
  }

=====

{"issue": [
        {
          "severity": "error",
          "code": "exception",
          "diagnostics": "Error encountered evaluating expression (%patient.id) for item (patient.id): library expression loaded, but had errors: Could not resolve identifier %patient in the current library., Member id not found for type null."
        },
        {
          "severity": "error",
          "code": "exception",
          "diagnostics": "Error encountered evaluating expression (%patient.birthDate) for item (patient.birthDate): library expression loaded, but had errors: Could not resolve identifier %patient in the current library., Member birthDate not found for type null."
        }
      ]}

appendix:

{
  "resourceType": "Questionnaire",
  "id": "11",
  "meta": {
    "versionId": "1",
    "lastUpdated": "2024-10-03T19:31:08.959+00:00",
    "source": "#Gqo4bXgfgBTXHlxJ",
    "profile": [
      "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-extr-defn"
    ]
  },
  "extension": [
    {
      "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-launchContext",
      "extension": [
        {
          "url": "name",
          "valueCoding": {
            "system": "http://hl7.org/fhir/uv/sdc/CodeSystem/launchContext",
            "code": "patient"
          }
        },
        {
          "url": "type",
          "valueCode": "Patient"
        }
      ]
    },
    {
      "url": "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
      "valueCode": "fhir"
    }
  ],
  "url": "http://hl7.org/fhir/uv/sdc/Questionnaire/demographics",
  "version": "3.0.0",
  "name": "DemographicExample",
  "title": "Questionnaire - Demographics Example",
  "status": "draft",
  "experimental": true,
  "subjectType": [
    "Patient"
  ],
  "date": "2023-12-07T23:07:45+00:00",
  "publisher": "HL7 International / FHIR Infrastructure",
  "contact": [
    {
      "name": "HL7 International / FHIR Infrastructure",
      "telecom": [
        {
          "system": "url",
          "value": "http://www.hl7.org/Special/committees/fiwg"
        }
      ]
    },
    {
      "telecom": [
        {
          "system": "url",
          "value": "http://www.hl7.org/Special/committees/fiwg"
        }
      ]
    }
  ],
  "description": "A sample questionnaire using context-based population and extraction",
  "jurisdiction": [
    {
      "coding": [
        {
          "system": "http://unstats.un.org/unsd/methods/m49/m49.htm",
          "code": "001",
          "display": "World"
        }
      ]
    }
  ],
  "item": [
    {
      "extension": [
        {
          "url": "http://hl7.org/fhir/StructureDefinition/questionnaire-hidden",
          "valueBoolean": true
        },
        {
          "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression",
          "valueExpression": {
            "language": "text/fhirpath",
            "expression": "%patient.id"
          }
        }
      ],
      "linkId": "patient.id",
      "definition": "Patient.id",
      "text": "(internal use)",
      "type": "string",
      "readOnly": true
    },
    {
      "extension": [
        {
          "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression",
          "valueExpression": {
            "language": "text/fhirpath",
            "expression": "%patient.birthDate"
          }
        }
      ],
      "linkId": "patient.birthDate",
      "definition": "Patient.birthDate",
      "text": "Date of birth",
      "type": "date",
      "required": true
    },
    {
      "extension": [
        {
          "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression",
          "valueExpression": {
            "language": "text/fhirpath",
            "expression": "today()"
          }
        }
      ],
      "linkId": "today",
      "definition": "today",
      "text": "Date of today",
      "type": "date",
      "required": true
    }
  ]
}
Lei Zhou2024-10-04T16:03:54Z

This may be a bug that @Brenin Rhodes fixed at the connectathon.

Brian Postlethwaite2024-10-04T16:13:34Z

Yes, this will be fixed in the coming release of CR.

Brenin Rhodes2024-10-04T16:17:35Z

@Brenin Rhodes does CR mean "Clinical Reasoning module" ?, which version of Hapi will the fix be in, thanks!

Lei Zhou2024-10-04T16:34:24Z

Yes: https://github.com/cqframework/clinical-reasoning

We're hoping to get it in the Nov release of HAPI.

Brenin Rhodes2024-10-04T16:48:48Z
Deploy release
#analytics on FHIR
Nikolai Ryzhikov announced that the domain http://sql-on-fhir.org/ now points to GitHub pages and discussed options for publishing releases, including the potential for hosting multiple version paths. Jesse Cooke noted an issue with HTTPS not working, suggesting it might be due to settings in GitHub Pages.
6 comments

I set the domain - and now http://sql-on-fhir.org/ looks at GitHub pages.

Nikolai Ryzhikov 🐬2024-10-02T17:43:33Z

Let's decide how we want to publish releases? Do we want to have the latest release on http://sql-on-fhir.org/

Nikolai Ryzhikov 🐬2024-10-02T17:44:48Z

If we will be backward compatible, do we need different published versions? Or can live with only current?

Nikolai Ryzhikov 🐬2024-10-02T17:46:20Z

@John Grimes 🐙 @Arjun Sanyal @Ryan Brush

Nikolai Ryzhikov 🐬2024-10-02T17:48:43Z

Potentially we can use paths like http://sql-on-fhir.org/2.0.0 as the official IG publisher. I will require some gh page engineering to get all versions on the same site (probably intermediate bucket)

Nikolai Ryzhikov 🐬2024-10-02T17:54:05Z

https is not working for me, maybe it's not enforced in the GH Pages setting?

Jesse Cooke2024-10-03T22:03:20Z
Mikael Rinnetmäki is working on sending a batch bundle of transaction bundles that include observations and their related provenance resources, and he seeks clarification on the appropriate URL format for these transaction bundles. Elliot Silver responded, indicating that they also had a similar use case but took a different direction without confirming the feasibility of the original approach, suggesting the URL for transactions should likely be either "." or "/".
6 comments

I'm exploring with this now. My approach is the same as @Elliot Silver had, a batch bundle of transaction bundles. More specifically, I'm sending a big batch of observations from a measurement device, and would like to include provenance resources with them. Each transaction bundle would include an Observation and the related Provenance, and I'd like to send many of these in a batch bundle.

Mikael Rinnetmäki2024-10-02T19:42:40Z

As mentioned in this thread, I also wondered whether the url for the transaction bundles in the batch bundle should be "" or "/". It would be nice to get this specified.

Mikael Rinnetmäki2024-10-02T19:42:46Z

I've tried with a few available FHIR servers and haven't seen this work.

Mikael Rinnetmäki2024-10-02T19:42:50Z

A simple example with just one transaction bundle within a batch bundle:

{
  "resourceType": "Bundle",
  "type": "batch",
  "entry": [
    {
      "request": {
        "method": "POST",
        "url": ""
      },
      "fullUrl": "urn:uuid:e04a96eb-5c06-4a44-9a41-5defff50ac20",
      "resource": {
        "resourceType": "Bundle",
        "type": "transaction",
        "entry": [
          {
            "request": {
              "ifNoneExist": "identifier=bundle-test-observation",
              "method": "POST",
              "url": "Observation"
            },
            "fullUrl": "urn:uuid:eb09e61a-e0c9-41b7-a412-d36daa873665",
            "resource": {
              "code": {
                "coding": [
                  {
                    "code": "2344-0",
                    "display": "Glucose [Mass/volume] in Body fluid",
                    "system": "http://loinc.org"
                  }
                ],
                "text": "Interstitial glucose"
              },
              "identifier": [
                {
                  "assigner": {
                    "display": "Sensotrend Oy",
                    "identifier": {
                      "system": "urn:ietf:rfc:3986",
                      "value": "https://www.sensotrend.com/"
                    }
                  },
                  "use": "official",
                  "value": "bundle-test-observation"
                }
              ],
              "resourceType": "Observation",
              "status": "final"
            }
          },
          {
            "request": {
              "method": "POST",
              "url": "Provenance"
            },
            "fullUrl": "urn:uuid:9aa87028-6b8f-421f-9524-2e0ffac8f002",
            "resource": {
              "agent": [
                {
                  "type": {
                    "coding": [
                      {
                        "code": "assembler",
                        "display": "Assembler",
                        "system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type"
                      }
                    ],
                    "text": "Assembler"
                  },
                  "who": {
                    "display": "My FHIR App",
                  }
                }
              ],
              "recorded": "2024-09-25T23:00:44.044+03:00",
              "resourceType": "Provenance",
              "target": [
                {
                  "type": "Observation",
                  "reference": "Observation/urn:uuid:eb09e61a-e0c9-41b7-a412-d36daa873665"
                }
              ]
            }
          }
        ]
      }
    }
  ]
}
Mikael Rinnetmäki2024-10-02T19:50:43Z

@Elliot Silver, interested in learning where you ended up.

Mikael Rinnetmäki2024-10-02T19:56:05Z

Mikael Rinnetmäki said:

More specifically, I'm sending a big batch of observations from a measurement device, and would like to include provenance resources with them. Each transaction bundle would include an Observation and the related Provenance, and I'd like to send many of these in a batch bundle.

This was essentially our case too.

Mikael Rinnetmäki said:

Elliot Silver, interested in learning where you ended up.

We headed in a different direction before proving or disproving this was possible with the server we were dealing with. Sorry.

My inclination is that the post url for the transactions should either be "." or "/". Using "" doesn't make sense to me.

Elliot Silver2024-10-02T20:01:54Z
Alaya Ben-Belkacem is looking for an alternative package to use the Communication.payload.content[x]:contentCodeableConcept element from the R5 specification in an R4 implementation, as the suggested package link is unavailable. Luud Slagter mentions they opted to create a custom extension to mimic the original URL and seeks clarification on URL escaping and ID construction for their implementation.
4 comments
PE
LS

Hello,

I need to use the Communication.payload.content[x]:contentCodeableConcept element, which is part of the pre-adopted R5 specification, in our R4 implementation. According to http://hl7.org/fhir/R5/versions.html#extensions I'd need to add the package hl7.fhir.extensions.r4:4.0.1, but I'm not able to find it (the link to this package on the aforementioned page does not resolve).

Is there an alternative package or solution that would allow me to handle this scenario?

Thanks!

Alaya Ben-Belkacem2024-10-02T09:30:12Z

not right now - work in progress

Grahame Grieve2024-10-02T09:33:32Z

@Grahame Grieve For now we decided to create a custom extension, mimicking the extension url as much as possible (we use nictiz.nl instead of hl7.org in the url), so that it can be replaced easily by the core extension as soon as the package becomes available. Since the element path contains brackets, is it correct to assume that the url of the core extension will be http://hl7.org/fhir/5.0/StructureDefinition/extension-Communication.payload.content%5Bx%5D:contentCodeableConcept (i.e. with the brackets url escaped)?

Moreover we would like to mimic the id as much as possible. How will the corresponding id be constructed, since it's not allowed to include characters such as [, ], % and : in an id? Currently we have omitted the content[x]: part altogether and use extension-Communication.payload.contentCodeableConcept as id.

Thanks in advance!

Luud Slagter2024-10-04T09:31:08Z

@Gino Canessa

Pieter Edelman2024-10-04T10:57:22Z
Powered by Health Samurai | 2022