FHIR Chat · Medication · argonaut

Stream: argonaut

Topic: Medication


view this post on Zulip Jenni Syed (Jun 23 2016 at 15:05):

All, I was absent for the call that discussed requiring all Medications to be contained. I'm curious about the reasoning behind this (I've heard it's primarily for consistency and ease of use for client apps).

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:06):

We originally used all contained Medications in our server, but switched most "simple" meds over to codeable concept based on pressure from applications, Grahame, and others in Argonaut (and since that was possible in DSTU 2)

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:07):

I'm curious about the reverse in stance now - it seems easier for apps to access the codeableConcept directly rather than digging into the Medication resource when possible

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:09):

previous conversations: https://groups.google.com/forum/#!searchin/argonaut-project/contained/argonaut-project/CyzzVBdoxO0/xLT2iHLVAQAJ and https://groups.google.com/forum/#!searchin/argonaut-project/contained/argonaut-project/50wSm34WhZQ/P3hBgATVAQAJ

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:10):

Also, to specifically require a server to "contain" a resource where it may have been a pure reference seems wrong/a misuse of the contained concept (I was told one of the servers had pure references but were going to switch to contained)

view this post on Zulip Josh Mandel (Jun 23 2016 at 15:23):

Thanks @Jenni Syed! There are two issues for clients:

1. Ensuring the medication data are always available directly from a prescription (without an additional HTTP call)

2. Ensuring that client-side logic is as simple as possible (but not simpler).

For #1, medicationCodeableConcept and reference-->contained both work — but not reference-->external.

For #2, the issue is that if data can live in 2 places, you need to maintain two code paths and check in both places all the time. So this is strictly harder to manage than just having a rule like "Always look in medicationCodeableConcept" or "Always look in medicationReference".

Cerner indicated that the semantics of medicationReference are sometimes required (e.g. for compounded drugs, because a single codeable concept is not expressive enough).

--> the only logical conclusion I could reach to satisfy all constraints is: always use medicationReference, and always make the reference contained.

view this post on Zulip Josh Mandel (Jun 23 2016 at 15:25):

I should also add: if Argonaut vendors wanted to support "_include" directives, issue #1 would go away :-)

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:27):

It still feels like abuse of the spec to require contained when something is indeed a reference.

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:28):

As to the "where to look" I could make the same argument for any value[x] type field. Why are we particularly concerned with this one? Why make it harder for the larger use cases where meds are single ingredient?

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:28):

Don't most of the open source libraries make this flexing somewhat simple?

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:30):

I personally feel like the Medication resource is fundamentally broken - it's part reference data and part activity data right now. But so far there's been resistance to moving this resource closer to a representation of "formulary"

view this post on Zulip Jenni Syed (Jun 23 2016 at 15:30):

However, we're currently limited to what we have. I would love to continue conversations around how to make the "what was ordered/given" simpler within HL7

view this post on Zulip Josh Mandel (Jun 23 2016 at 15:42):

I agree the Medication resource as specified isn't ideal, but @Jenni Syed can you clarify what you mean by "activity data"? In the context of this Argonaut DSTU2 IG: we're just trying to work with it as published.

When it comes to client library support: I don't know any open-source client that, given a MedicationOrder, allows you to say "what's the drug code" with automated resolution across (medicationCodeableConcept vs. medicationReference) and also across (local vs. in-bundle vs. remote-fetch). It'd be nice, but it also forces all code to be written asynchronously, etc. In other words, it's hard.

Now, writing a single function to resolve a contained reference isn't hard. And it's reliable. The actual function is 2 lines instead of 1 line long, but once you write it, you're done.

view this post on Zulip Josh Mandel (Jun 23 2016 at 15:42):

It still feels like abuse of the spec to require contained when something is indeed a reference.

Agreed, it could be considered "an abuse", but it seems like the "least worst" solution (because it doesn't create practical issues I can see).

view this post on Zulip Josh Mandel (Jun 23 2016 at 15:44):

Also, re value[x]: different types are used to convey different information. So there's a reason for the pain. Whereas with this drug resolution issue, it's the same information in both cases (just more or less detailed).

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:07):

For the contained on simple, would only the Medication.code be filled out? For multi-ingredient, is the Medication.code always filled out? If so, with what?

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:09):

Also @Josh Mandel When I said activity data - some of the fields on Medication are specifically set based on an instance of an order. Whereas others are primarily "reference" - like if it's tylenol 325 and other packaging/product details

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:09):

which fields are order-specific? That's the part I want to understand.

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:10):

For the contained on simple, would only the Medication.code be filled out? For multi-ingredient, is the Medication.code always filled out? If so, with what?

I think we'd want Medication.code to be reliably populated -- even if just with a "text" element describing the compounded product.

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:10):

Examle of "activity" on Medication are primarily the dosages of multi-ingredient meds, IIRC

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:12):

It's not clear to me -- I mean, if you're prescribing a tylenol/codeine, I'd expect to see an RxNorm code in Medication.code, and that's it. But even if you did populate Medication.product.ingredient (x2), that's still not activity-specific.

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:12):

Also, the lot info gets weird, depending on what you're tracking/what level. Since many pharmacy regulations state you need toknow the lot/exp of the specific order/fill, this is the only place to put that

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:12):

Oh, I see - batch (lot number) would definitely fall in that category though

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:12):

Yeah

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:12):

The amounts are order specific. Otherwise, how do you say exactly how much of each item is in a bag (for IV or TPN)?

view this post on Zulip Jenni Syed (Jun 23 2016 at 16:16):

The form also gets clumsy for a compound or multi-ingrient. I believe we do this by setting form for the order. But for compound, the ingredients may be compounded into a cream. That I'm less concerned about as you likely don't care if the things that were compounded together started as powder or something else

view this post on Zulip Josh Mandel (Jun 23 2016 at 16:18):

Agreed!

view this post on Zulip Eric Haas (Jun 23 2016 at 17:51):

@Jenni Syed I started eiditing IG to show how this decision would look in the IG. I got stuck on the Medication Resource part and is thus unfinished. Yes as Josh said code is required. That is a no brainer but what about the compounded stuff. @Josh Mandel is saying text in code.display. If that is the case the why not just use Medication.medicationCodeableConcept?

view this post on Zulip Jenni Syed (Jun 23 2016 at 17:55):

@Eric Haas For IVs, Compounds, etc, there are likely other things filled out on that Medication to provide enough detail to apps doing logic based on dose or ingredient info (ie: not just displaying). However, I'm not sure any of that is required for MU

view this post on Zulip Jenni Syed (Jun 23 2016 at 17:55):

S4S likely has other concerns there, in that they likely do want RxNorms/coded ingredient information which is buried in the ingredient lists on Medication

view this post on Zulip Jenni Syed (Jun 23 2016 at 17:55):

(as would other apps)

view this post on Zulip Eric Haas (Jun 23 2016 at 18:10):

adding @Brett Marquard I don't see the distinction. It seems like a Kludge if we use the Medication resource but then only use the text to do compounded meds. We could then say must support codes and use the contained MedicationResource if you want to fill out anything more than a text description of a compounded medication. BTW we expected push back so thanks for bringing this up.

view this post on Zulip Brett Marquard (Jun 23 2016 at 18:19):

Are clients prepared to handle IVs, Compounds, etc? We started modeling some of this in C-CDA and folks stopped because they got very complicated and the value on a document exchange wasn't clear. I am sure these would be valuable for S4S and other exchange, but wonder if we should nail the simpler use case first.

view this post on Zulip Josh Mandel (Jun 23 2016 at 18:20):

S4S likely has other concerns there, in that they likely do want RxNorms/coded ingredient information

@Jenni Syed Maybe for compounded drugs. But for products in RxNorm, we can easily look up ingredients (i.e. just give us the SCD; we don't need the EHR to tell us what ingredients belong to an SCD, since NLM already provides that information).

view this post on Zulip Jenni Syed (Jun 23 2016 at 19:03):

@Josh Mandel For most things that qualify as IVs/Multi-ingredient/TPN, AFAIK there's no single RxNorm that represents them. This was the only remaining reason our server used the contained Medication resource

view this post on Zulip Jenni Syed (Jun 23 2016 at 19:04):

They usually only have those codes if there's a premix available

view this post on Zulip Josh Mandel (Jun 23 2016 at 19:39):

@Jenni Syed Totally -- that makes sense, and for these mixtures, reporting ingredients is great. I'm just saying we don't need/expect that same level of detail for prescribables.

view this post on Zulip Jenni Syed (Jun 23 2016 at 19:52):

interestingly, there's nothing AFAIK in FHIR that indicates an order is inpatient vs. outpatient

view this post on Zulip Josh Mandel (Jun 23 2016 at 20:04):

Well, MedicationOrder.encounter --> Encounter.class is a window onto that info.

view this post on Zulip Jenni Syed (Jun 23 2016 at 22:07):

@Josh Mandel That doesn't work when the ER or hospital prescribes you meds for home

view this post on Zulip Jenni Syed (Jun 23 2016 at 22:08):

You *might* be able to get there by who eventually dispenses, but that's assuming you know that info

view this post on Zulip Josh Mandel (Jun 23 2016 at 22:09):

I suppose that for inpatient or ED meds, you'd expect to find some MedicationAdministrations pointing back to the order.

view this post on Zulip Jenni Syed (Jun 24 2016 at 14:26):

Maybe, though there's nothing stopping home care or patients from inputing admins (at least in the spec)

view this post on Zulip Jenni Syed (Jun 24 2016 at 14:27):

But yes, many different methods to try to determine the origin of the med

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:19):

back to this

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:21):

we expected that mainly systems would reference medications in one of 3 ways:
- a code that refers to an national drug dictionary that implicitly defines a Medication resource (and In Australia, we'll be making that explicit for the national drig dictionaries - they'll publish Medication resources)
- a direct reference to the institutional pharmacy formulary (not usually an option for ambulatory prescriptions)
- an inline custom formulation (TPN, some IVs, creams etc)

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:22):

we expected that since all these are valid choices at the clinical level, clients would naturally need to be able to handle all these 3 options - codes, contained and external references.

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:22):

my opinion is that trying to restrict the options to less than these is 'too simple'

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:23):

I don't think there's much mileage in Argonaut trying for something simpler here either.

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:24):

I thnk that the feature that's currently in medication that belongs outside of it as well is the product.form. Frequently, clinicians order by code + form

view this post on Zulip Grahame Grieve (Jun 27 2016 at 01:25):

@Jenni Syed - what specificially were you referring to when you talked about resistance to fixing medication?

view this post on Zulip Lloyd McKenzie (Jun 27 2016 at 03:56):

But if they want code + form, why wouldn't that be a contained Medication? (because in addition to code + form, sometimes there's code + strength or other things too.

view this post on Zulip Grahame Grieve (Jun 27 2016 at 05:45):

because it's not the rest of the medication

view this post on Zulip Lloyd McKenzie (Jun 27 2016 at 05:54):

If it's a contained resource, it doesn't need to be - it's just the details you happen to have. We don't want to propagate medication details into the order.

view this post on Zulip Lloyd McKenzie (Jun 27 2016 at 05:54):

If you need more than a bare code, then you need the resource - and can choose whether you have enough to make it stand-alone or whether it should be contained

view this post on Zulip Grahame Grieve (Jun 27 2016 at 06:14):

no that missed the point. If I use a contained medication, I have to populate all of the correct details for medication. There's no way to just do code + form

view this post on Zulip Lloyd McKenzie (Jun 27 2016 at 06:25):

Why on earth not? You can have a contained Patient that just lists name and gender, why not a contained Medication that just lists code and form? You send the information you know (and can skip sending information pre-coordinated into the code).

view this post on Zulip Jenni Syed (Jun 27 2016 at 13:51):

@Grahame Grieve We discussed some of the challenges with Medication at the last WGM, along with what the intent was for this resource. IE: if it was inteded to represent a formulary. Also, that most non-premix multi-ingredient type prescriptions/administrations would all require a contained medication as it is now (or for Medication to be unique by order for those). I don't think we landed what the intent was (though I get the impression it may not be representative of a formulary). We discussed possibly turning the references from Med Order/Admin/Dispense into a list of Medications instead of single reference to help with multi-ingredient. However, sounds like the concern was that someone might misuse that for placing multiple separate prescriptions/orders. EG: Ibuprofen for pain, Amoxicillin x 10 days on the same order

view this post on Zulip Jenni Syed (Jun 27 2016 at 13:52):

The general feeling I got from the Pharmacy group was that there wasn't a concern that all mutli-ingredient/non-premix would always need to be contained on the Order/Admin/Dispense side

view this post on Zulip Jenni Syed (Jun 28 2016 at 19:34):

Sooo... are we good with leaving simple meds = to code or reference & multi ingredient = reference? And does it really matter if the reference is contained or remote?

view this post on Zulip Jenni Syed (Jun 28 2016 at 19:34):

Until some future time when we land on something better?

view this post on Zulip Jenni Syed (Jun 28 2016 at 19:35):

For apps that only want display - we can require that display/text is populated on codeable or display is required on reference?

view this post on Zulip Grahame Grieve (Jun 28 2016 at 19:50):

I think it doesn't matter if it's contained or remote, but if you do remote references, it would be good to support _include (even if just for this use case)

view this post on Zulip Josh Mandel (Jun 29 2016 at 13:43):

I think it doesn't matter if it's contained or remote, but if you do remote references, it would be good to support _include (even if just for this use case)

I have a very different take here @Grahame Grieve @Jenni Syed -- I think it's basically broken to offer developers an API where they're forced to issue 11 separate HTTP API calls just to fetch the drug codes associated with a patient's ten-medication-long list. We've built clients that work this way and they're complicated and slow. The complexity is manageable, but the slowness is not. Just being able to display a name isn't enough; interesting apps need access to semantics!

The fixes for this include: always use _contained, or support _include=MedicationOrder:medication. But if you do neither, you leave clients in a lurch. And Argonaut should specify that that's not okay.

view this post on Zulip Josh Mandel (Jun 29 2016 at 15:24):

Alternatively, vendors could support batch so an app could issue multiple queries together. We just need some way.

view this post on Zulip Josh Mandel (Jun 29 2016 at 15:24):

Of course read-only batches would be fine.

view this post on Zulip Jenni Syed (Jun 29 2016 at 16:23):

@Josh Mandel This specific instance doesn't require batch, but if you didn't support _include, it would require at least one more query, assuming the server supportted the _id parameter, correct? ie: get all medications, then get all the unique referenced id's like so:
/Medication?_id=1,2,3,4...

view this post on Zulip Jenni Syed (Jun 29 2016 at 16:24):

(note: as to _include, I currently have no skin in this game other than trying to find a common approach since our references are either code or contained, so others should add/discuss here...)

view this post on Zulip Eric Haas (Jun 29 2016 at 17:03):

What I am understanding so far is that we need the following:
'.medicationCodeableConcept' = mandatory to support for both client and server
'.medicationReference' = mandatory to support for both client and server
need to agree on whether servers must always use contained ( this is current state of IG) or must support _include or both ( whichi is what I think GG is saying) - If we only say must always support _include that does not preclude a reference from being contained.

view this post on Zulip Josh Mandel (Jun 29 2016 at 17:26):

Jenni: Indeed, comma-separated IDs are also a fine way to do this. I just want to make sure we have at least *one* required way that argonaut clients can rely on. Whether that's batch, or _id with commas, or _contained ,or _include -- just as long as we agree on at least one way.

view this post on Zulip Josh Mandel (Jun 29 2016 at 17:29):

'.medicationCodeableConcept' = mandatory to support for both client and server

This doesn't quite make sense. Are we saying that a server would be in violation of the spec it just happened to always use medicationReference? How would we decide?

view this post on Zulip Josh Mandel (Jun 29 2016 at 17:29):

I think we'd have to say "servers can choose, and clients must be prepared to deal with both"

view this post on Zulip Eric Haas (Jun 29 2016 at 18:02):

Despite how great it would be if everyone used RXNorm as codeable when appropriate. I'm OK with splitting the server and client requirements.

view this post on Zulip Eric Haas (Jun 29 2016 at 18:02):

...for now

view this post on Zulip Grahame Grieve (Jun 29 2016 at 21:49):

@Josh Mandel: "I have a very different take here" - I didn't think this was a very different take - I agree. Perhaps 'would be good' wasn't expressed strongly enough...

view this post on Zulip Josh Mandel (Jun 29 2016 at 23:23):

Ah, great. I misinterpreted your emphasis. But good :-)

view this post on Zulip Brett Marquard (Jun 30 2016 at 02:21):

@Grahame GrieveDo you have any concerns if we require a server support code and contained; or always contained? I am trying to find the middle ground...

view this post on Zulip Grahame Grieve (Jun 30 2016 at 03:15):

my opinion is that all 3 cases - code, contained, and external reference - are all valid workflows. Even we we said that we could prohibit the first so that you always used code.contained - which is functionally equivalent - I see little prospect that other groups with different dynamics than Argonaut would make the same choice, particularly in the ambulatory context. So my opinion is that we might as well say that clients should support all 3 options, and servers can choose any combination of the three.

view this post on Zulip Grahame Grieve (Jun 30 2016 at 03:16):

but since @Josh Mandel is always watching .... if we allow external references, we should make it clear what the most efficient way to retrieve all the medications information is

view this post on Zulip Josh Mandel (Jun 30 2016 at 15:13):

If I just keep repeating myself... ;-)

I think making it clear is good -- but we also need to clarify that at least one acceptably-fast method is required of Argonaut implementors. So far: contained and _include work (with no extra HTTP calls) and batch, and ?_id=a,b,c,d,... work (with one extra HTTP call). We need to pick at least one of these four and require it (or somebody can suggest a 5th!)

view this post on Zulip Eric Haas (Jun 30 2016 at 16:15):

I vote for
- code
- contained
- _include
where clients SHALL support all 3 options, and servers can choose any combination of the three.

view this post on Zulip Pascal Pfiffner (Jul 01 2016 at 10:57):

Is there a need to specify what clients shall support? Because that's usually not done.

view this post on Zulip Jenni Syed (Jul 01 2016 at 16:00):

@Pascal Pfiffner DAF actually specifies both client and server behavior

view this post on Zulip Jenni Syed (Jul 01 2016 at 16:04):

eg: requestors (client) and responders (server): http://hl7.org/fhir/dstu2/daf/daf.html#D.0.3.1

view this post on Zulip Josh Mandel (Jul 01 2016 at 16:37):

@Eric Haas what exactly does it mean, for a client to have "SHALL support" both contained and _include? A client has to write a specific query -- which one would it write? If we said "clients always are allowed to pass an _include parameter, and servers must accept it -- either by implementing _include, or by sticking meds in contained", that could work.

view this post on Zulip Jenni Syed (Jul 01 2016 at 17:36):

@Josh Mandel Isn't this scenario precisly what the conformance doc is expected to be used for?

view this post on Zulip Jenni Syed (Jul 01 2016 at 17:36):

We have competing goals/previous discussions here

view this post on Zulip Jenni Syed (Jul 01 2016 at 17:36):

EG: wanting servers to fail if known but unsupportted parameters are passed vs. ignoring parameters they don't really support

view this post on Zulip Josh Mandel (Jul 01 2016 at 20:53):

Well, maybe a server could have a way to express this in a conformance statement. We'd have to define two or three different patterns and require that each server fit one of those two or three, and that clients could then resolve/determine each and adjust behavior to fit? It's possible, but 1) I'm skeptical we can get it right, and 2) even if we do, I'm kind of worried about the complexity of it.

view this post on Zulip Eric Haas (Jul 01 2016 at 23:37):

Is summarized this discussion and subsequent offline discussion to: https://github.com/argonautproject/implementation-program/issues/46


Last updated: Apr 12 2022 at 19:14 UTC