Stream: Da Vinci
Topic: submit-data operation in CI build
Eric Haas (Jul 30 2018 at 17:23):
1) I'm hoping we can us these for both r3 and r4. Need to check if they validate for R3. However the MRP example given is not all like what we discussed for DEQM. I think that needs to be in alignment or there will be mass confusion. @Bryn Rhodes
Eric Haas (Jul 30 2018 at 17:51):
it looks like $submit-data will work in R3 but $ collect-data uses elements added in R$ so will have to have a R3 version for that one.
Bryn Rhodes (Jul 30 2018 at 20:51):
What is unexpected about the MRP example included in the build? Just that it's not using Task or is there something else?
Bryn Rhodes (Jul 30 2018 at 20:51):
And yes, the $collect-data for R3 would need to use the $evaluate-measure parameters for R3 (they were broadened in R4 to support "subject" as opposed to just "patient")
Eric Haas (Jul 30 2018 at 21:31):
it does not follow what we discussed. the only evaluated measure is either Task or Observation
Eric Haas (Jul 31 2018 at 03:22):
The Collect data operation uses the GET syntax. based on the spec : "When an operation is idempotent, and the parameters are all primitive data types with no extensions (as is the case with the example above), it may be invoked using GET as well."
Eric Haas (Jul 31 2018 at 03:26):
it is listed as not indempotent and reference isn't a simple search parameter. It should be a POST only
Eric Haas (Jul 31 2018 at 03:30):
@Bryn Rhodes
Eric Haas (Jul 31 2018 at 04:38):
I don't this is an Idempotent operation. How is it changing the state?
Bryn Rhodes (Jul 31 2018 at 08:45):
It depends whether the implementation stores the MeasureReport resource.
Eric Haas (Jul 31 2018 at 17:26):
If I do $collect-data its like fetching a bag of resources. I pretty sure I can do that without affecting them because its like a GET right? The operation does not affect them.
Eric Haas (Jul 31 2018 at 17:27):
I don't think Reference is a primitive parameter @Lloyd McKenzie ?
Eric Haas (Jul 31 2018 at 17:28):
though it certainly behaves like one in your example but technically no.... do we need some clarification in the spec?
Lloyd McKenzie (Jul 31 2018 at 17:48):
I'm not sure what you mean by "primitive parameter", but there is a search parameter that's associated with Reference that can be passed on the URL, if that's what you mean.
Bryn Rhodes (Jul 31 2018 at 18:31):
Yes, $collect-data is like fetching a bag of resources, but it also creates a MeasureReport, which may or not be persisted by the responding server. If it's persisted, the operation wouldn't be idempotent (because invoking it multiple times would result in slightly different MeasureReport resources). If it's not persisted, it's still not 100% idempotent (for the same reason), but at least it's not actually changing state.
Eric Haas (Jul 31 2018 at 20:20):
If it's persisted, the operation wouldn't be idempotent (because invoking it multiple times would result in slightly different MeasureReport resources
Eric Haas (Jul 31 2018 at 20:20):
how exactly does it change the MeasureReport?
Grahame Grieve (Jul 31 2018 at 20:20):
how does that make it not idempotent?
Eric Haas (Jul 31 2018 at 20:21):
@Lloyd McKenzie from the spec on the operations page "When an operation is idempotent, and the parameters are all primitive data types with no extensions (as is the case with the example above), it may be invoked using GET as well."
Eric Haas (Jul 31 2018 at 20:23):
Reference is not a primitive data types ( sorry not parameter) but it can sure act like one. It is a special case for using GET?
Eric Haas (Jul 31 2018 at 20:23):
I have always used uri instead
Eric Haas (Jul 31 2018 at 20:24):
or string with a reference search type but url is more direct
Eric Haas (Jul 31 2018 at 20:28):
@Bryn , I missed a key concept here the $collect triggers the system to create a MR resource, but how is that different from a system that creates other resources on the fly from a GET.
Lloyd McKenzie (Jul 31 2018 at 20:41):
If your operation parameter has a "search type" specified, then you can use it on a GET. For a type of Reference, you can have a search type of reference.
Eric Haas (Jul 31 2018 at 21:02):
Rule opd-2: A search type can only be specified for parameters of type string (expression : searchType.exists() implies type = 'string', xpath: not(exists(f:searchType)) or (f:type/@value = 'string'))
Eric Haas (Jul 31 2018 at 21:04):
My point is @Bryn Rhodes if we want to use GET syntax then need to change the types from Reference to uri. and decide is Idempotent ( which I think it is)
Bryn Rhodes (Jul 31 2018 at 21:09):
I'm fine deciding it's idempotent, but based on Lloyd's last statement, I don't think we do need to change the type to uri, I've been using reference parameters with GET for a long time.
Eric Haas (Jul 31 2018 at 21:14):
Well either you are wrong or the spec is wrong.....
Eric Haas (Jul 31 2018 at 21:14):
opd-2 to be specific
Eric Haas (Jul 31 2018 at 21:16):
... and a lot of servers are forgiving.
Eric Haas (Jul 31 2018 at 21:17):
but my German in me says we should stick to the spec and use either a uri or string and type reference search parameter.
Eric Haas (Jul 31 2018 at 21:19):
and since OD is going normative, I'd like an opinion from @Lloyd McKenzie and @Grahame Grieve about this as well.
Bryn Rhodes (Jul 31 2018 at 21:19):
Why are we specifying the searchType?
Bryn Rhodes (Jul 31 2018 at 21:20):
I've never done that, and I don't understand why we need that. Isn't that the constraint that's being violated?
Eric Haas (Jul 31 2018 at 21:20):
if you choose string type you can specify the search parameter type. the other option is type uri.
Bryn Rhodes (Jul 31 2018 at 21:20):
Right, but we don't need to do that.
Bryn Rhodes (Jul 31 2018 at 21:21):
For reference, it's just understood to be a reference.
Eric Haas (Jul 31 2018 at 21:21):
What is written in the spec is...
Eric Haas (Jul 31 2018 at 21:22):
What http methods can be used for the operation depends on the .affectsState value and whether the input parameters are primitive or complex:
Servers SHALL support POST method for all operations.
Servers SHALL support GET method if all the parameters for the operation are primitive or there are no parameters and the operation has affectsState = false.
Eric Haas (Jul 31 2018 at 21:22):
type Reference is a complex data type so technically can't use GET.
Eric Haas (Jul 31 2018 at 21:24):
I don't see a variance saying you can and to your point, I don't see a place that say you can't support using GET with type Reference, but then we will need to make that part of the Conformance Rules for the IG I guess.
Eric Haas (Jul 31 2018 at 21:25):
I think my way is easier.BTW :-)
Bryn Rhodes (Jul 31 2018 at 21:27):
Uncle
Bryn Rhodes (Jul 31 2018 at 21:28):
So if we say it's a string, we can sets the search type?
Bryn Rhodes (Jul 31 2018 at 21:28):
I don't see where to do that in the build though.
Lloyd McKenzie (Jul 31 2018 at 21:39):
Something is definitely wrong with opd-2. The list of possible searchTypes is much too long to make sense if its only allowed for strings. I suspect the intention was that we would only specify searchType for string because that's the only place it wasn't obvious. @Grahame Grieve, can you confirm?
Eric Haas (Jul 31 2018 at 21:47):
I don't see it in the spreadsheets either. I
Eric Haas (Jul 31 2018 at 21:48):
used type uri instead, but interested to what GG says.
Eric Haas (Jul 31 2018 at 21:49):
also can create from XML but I don't think the build supports that.
Eric Haas (Jul 31 2018 at 23:38):
data-requirements is Idempotent too.
Grahame Grieve (Jul 31 2018 at 23:40):
I don't see what's wrong with opd-2?
Bryn Rhodes (Jul 31 2018 at 23:41):
The question I have is can you use GET to invoke an operation if it has reference parameters?
Grahame Grieve (Jul 31 2018 at 23:41):
you can't
Grahame Grieve (Jul 31 2018 at 23:42):
oh hang on. do you mean type = reference or searchType = reference?
Bryn Rhodes (Jul 31 2018 at 23:42):
The documentation at this point says no, but I thought that at one point it didn't say that, and I know at least HAPI server supports it, we've been doing that.
Bryn Rhodes (Jul 31 2018 at 23:42):
Type = reference
Bryn Rhodes (Jul 31 2018 at 23:42):
So I can say $evaluate-measure?measure=Measure/mrp
Grahame Grieve (Jul 31 2018 at 23:42):
type = reference can't be done with get
Bryn Rhodes (Jul 31 2018 at 23:42):
And do that with a GET
Grahame Grieve (Jul 31 2018 at 23:42):
then that's not type = reference, that's type = string + searchType = reference
Bryn Rhodes (Jul 31 2018 at 23:44):
Ah
Bryn Rhodes (Jul 31 2018 at 23:44):
So how do I specify that in the operation definition in the spreadsheet?
Bryn Rhodes (Jul 31 2018 at 23:45):
Because right now, all I have is that the parameters are of type Reference(...)
Grahame Grieve (Jul 31 2018 at 23:47):
column "Search Type"
Bryn Rhodes (Jul 31 2018 at 23:48):
Okay, my spreadsheet's old enough that it doesn't have that column.
Bryn Rhodes (Jul 31 2018 at 23:48):
I'll add it.
Bryn Rhodes (Jul 31 2018 at 23:48):
And make those changes.
Bryn Rhodes (Jul 31 2018 at 23:48):
But I'll do it tomorrow, is that okay @Eric Haas?
Eric Haas (Jul 31 2018 at 23:59):
Yep thanks for clearing that up. Im out for the next week, will check in periodically but not much.
Lloyd McKenzie (Jul 31 2018 at 23:59):
So if you're going to have a reference as a parameter, you have to send it as "string" if you use Parameters?
Bryn Rhodes (Aug 01 2018 at 04:35):
You have to send it as string if you want to not use Parameters (invoke with GET).
Lloyd McKenzie (Aug 01 2018 at 06:01):
I thought using GET was optional?
Bryn Rhodes (Aug 01 2018 at 23:46):
It is, but we want to make sure systems can use the GET. If we use reference parameters, they will only be able to POST.
Bryn Rhodes (Aug 01 2018 at 23:46):
So I applied these changes to the R4 operations.
Last updated: Apr 12 2022 at 19:14 UTC