Stream: subscriptions
Topic: Appointment subscriptions
Josh Mandel (Sep 24 2018 at 19:52):
Can someone help me with a gloss on http://www.fhir.org/guides/argonaut/scheduling/patient-scheduling.html -- what do operations like $find
and $prefetch
provide instead of regular FHIR search interactions?
Jens Villadsen (Sep 24 2018 at 21:19):
Looks like a custom way to require fixed set of parameters ... but what do I know ... :neutral_face:
Josh Mandel (Sep 26 2018 at 20:46):
@Eric Haas do you have any background you can share on this?
Eric Haas (Sep 26 2018 at 21:20):
The operations are like api calls to a black box appointment scheduler. You plug in your requirements and it returns some options. There is no expectation of a set of FHIR open Slots or open Appointments stored in a server ready to be queried. where a search would work. @Cooper Thompson and @Brandon LaRue can speak to the real world functionality a bit better than I.
Josh Mandel (Sep 26 2018 at 23:11):
Okay -- I'd like to understand the distinction. Is it that only a limited set of slots will be returned?
Grahame Grieve (Sep 26 2018 at 23:12):
search only applies to existing things. the operation creates new things. I think that's the difference here
Eric Haas (Sep 27 2018 at 01:01):
The server would determine how many proposed appointment times or slots to return based on the input parameters. There is a parameter for the client to limit the number but that is a suggestion really. Note for $find these are proposed appointment times and they could disappear by the time you try to book. For prefetch the client server does all the work to determine the appointments instead of the EHR's Scheduling Server, So the EHR sends them a bunch of open slots periodically refreshing them so they can present appointments to the end user based on their ( Client Server's) logic and business rules. This is very similar to booking a flight for the end user you get a set of choices and then book.
Eric Haas (Sep 27 2018 at 01:06):
... and as GG points out there is no such thing as a pre-existing set of open slots/appointments to choose from. These are all created on the fly all the time. Even the idea of discrete slots is often not how these systems work they have varying chunks of time and the slot are virtual... Brandon has a lot experience with this and can explain it in great detail.
Josh Mandel (Sep 28 2018 at 04:34):
Grahame Grieve: search only applies to existing things. the operation creates new things. I think that's the difference here
Wait, $find
creates new things?
Josh Mandel (Sep 28 2018 at 04:35):
Maybe I'm just confused by the name, in this case. @Brandon LaRue, I'm subscribing you here (zulip prompts me that you're not in this channel).
Grahame Grieve (Sep 28 2018 at 04:36):
find sounds like a domain appropriate name (e.g. 'find the next available slot') but a bit confusing from a FHIR search perspective, since at the API level, it's not 'finding' a resource
Josh Mandel (Sep 28 2018 at 04:36):
Like in the example, $find
is returning Appointment
resources with ids and everything (e.g., "id": "proposed-appt-3"
). Do they not then exist on the server?
Grahame Grieve (Sep 28 2018 at 04:37):
not sure. I think they would by then
Josh Mandel (Sep 28 2018 at 04:39):
(I mean, I suppose the answer is "there is no general purpose fhir server" -- but if that's the case, it seems like the regular fhir search interaction would have served as well.)
Grahame Grieve (Sep 28 2018 at 04:41):
you mean, if there was a general purpose server that had a fully populated set of slots, then you could find the next available appropriate slot simply by doing a search?
Josh Mandel (Sep 28 2018 at 04:41):
well, that and also for a limited-purpose server that just invented slots on the fly (and kept them around until they were confirmed by a client or timed out).
Grahame Grieve (Sep 28 2018 at 04:43):
not sure how search would work for the second case.
Josh Mandel (Sep 28 2018 at 04:44):
Just the same way that $find
does -- but it would be invoked via GET /Appointment
Grahame Grieve (Sep 28 2018 at 04:44):
also, if you had fully populated slots, is there any flexibility around their length? Is everything always 7 minutes?
Grahame Grieve (Sep 28 2018 at 04:44):
what's it finding?
Josh Mandel (Sep 28 2018 at 04:46):
http://www.fhir.org/guides/argonaut/scheduling/OperationDefinition-appointment-find.html really describes visit types rather than explicit lengths.
Grahame Grieve (Sep 28 2018 at 04:47):
I think that's another reason why the search semantics are not appropriate in this case
Josh Mandel (Sep 28 2018 at 04:50):
Appointment supports search by serviceType; it's not entirely clear to me that this wouldn't fit -- where a special-purpose server would examine its schedule, and your search, and return a set of Appointments that fit the criteria (but I do take your point).
Josh Mandel (Sep 28 2018 at 04:51):
To be clear, I _like_ the explicit rpc style here. It just makes me think we should be using it more broadly (or be able to articulate the distinction).
Eric Haas (Sep 28 2018 at 06:20):
I think the FHIR documentation outlines pretty clearly why we use an operation in this case: http://build.fhir.org/operations.html#3.2.0
Josh Mandel (Sep 28 2018 at 13:44):
I agree -- it's just "active role" is kind of slippery when your server is anything other than a rote FHIR store.
Grahame Grieve (Sep 28 2018 at 13:47):
why?
Josh Mandel (Sep 28 2018 at 13:54):
Just because there is some logic to apply -- you may be for example of inferring the "existence" of a resource
Josh Mandel (Sep 28 2018 at 13:55):
I'm not deeply bothered by this. Just musing...
Grahame Grieve (Sep 28 2018 at 13:56):
question is whether the inferring behaviour is explicit to an API consumer
Josh Mandel (Sep 28 2018 at 15:03):
Like, consider a FHIR search endpoint for medications where the server decorated the medication ndc codes with rxnorm codes, but only if for certain consumers.. where does that fit on the spectrum? Does it matter it has explicit inline hints from the client, vs static preferences? Is that no longer a search, and crossing into $find-and-translate (or whatever) territory?
Josh Mandel (Sep 28 2018 at 15:04):
Again, really just musing here.
Grahame Grieve (Sep 28 2018 at 15:25):
not sure
Last updated: Apr 12 2022 at 19:14 UTC