Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid request: The FHIR endpoint on this server does not know how to handle POST operation[Bundle/$apply-cql] with parameters [[]] #530

Closed
mattStorer opened this issue Jun 7, 2022 · 28 comments
Assignees
Labels
cds-hooks Cds-hooks implementation

Comments

@mattStorer
Copy link

working in cqf-ruler master branch updated this morning. "mvnw package" builds everything successfully. running CQF-ruler starts great. loading resources into the ruler goes fine.

however, attempting to execute a PlanDefinition via CDS-hooks call (with attribute "applyCql: true"), CQL execution fails with the following error:

2022-06-07 09:18:39.157 [http-nio-8080-exec-4] ERROR o.o.c.r.cdshooks.r4.CdsHooksServlet [CdsHooksServlet.java:238] ca.uhn.fhir.rest.server.exceptions.InvalidRequestException: HTTP 400 : Invalid request: The FHIR endpoint on this server does not know how to handle POST operation[Bundle/$apply-cql] with parameters [[]]

It's not clear why this is happening. Everything worked fine in CQF-ruler 0.4.1. I've reached out to the Zulip chat channels but so far no responses.

@mattStorer
Copy link
Author

see attached for associated cqf-ruler logs

apply-cql error log.txt

@c-schuler
Copy link
Contributor

c-schuler commented Jun 20, 2022

Apologies for the delayed response.

Would you mind running this without using the applyCql attribute? Let me know what you get.

@mattStorer
Copy link
Author

Apologies for the delayed response.

Would you mind running this without using the applyCql attribute? Let me know what you get.

sure thing. just did that, and it looks like first of all, there are no errors! yay!

on the other hand, no suggestions are coming back for any of our recommendations now (which are generated as a result of CQL execution). this is in line with my understanding of what "applyCql" does, which is to say, runs associated CQL and generates cards (i.e. "suggestions") as a response. (if my understanding of what "applyCql" does is wrong, please correct my understanding).

so I'm like 99% sure we need "applyCql: true".

has something changed between cqf-ruler 0.4.1 that would cause "applyCql: true" to suddenly not work? we've had that flag set since the beginning and it only just started breaking with the upgrade to 0.5.0.

it seems that setting "applyCql: false" disables CQL execution.

thoughts?

thanks, and please let me know if there's anything else I can do to help.

Matt

@mattStorer
Copy link
Author

see attached for cqf-ruler logs associated with applyCql=false execution (for which recommendations are evidently not executed as nothing comes back for them, which should be happening)
cqf-ruler-localhost-applycql=false-20220621.txt

@c-schuler
Copy link
Contributor

The $apply-cql operation populates prefetch FHIR resource elements using CQL expressions. It was developed mainly to simplify CDS Hooks test cases where date and time elements needed to be maintained.

@c-schuler
Copy link
Contributor

Has anything changed on your end since the 0.5.0 release? Perhaps the prefetch data is formatted differently?

@mattStorer
Copy link
Author

Has anything changed on your end since the 0.5.0 release? Perhaps the prefetch data is formatted differently?

nothing has changed in our codebase. the request that has worked against cqf-ruler 0.4.1 was not modified before attempting to get it to work against cqf-ruler 0.5.0. the upgrade to 0.5.0 has been something we've been putting off for a while because other things were changed in cqf-ruler (how it starts, where the FHIR endpoint is, etc.), so we were waiting until a good opportunity to make the jump. so we're in the process of making that jump, just trying to get the stuff that's been working to just run against the new version of the ruler, but yeah it looks like the 0.5.0 version of cqf-ruler doesn't know how to execute CQL anymore. it's very confusing.

does the 0.5.0 release require a differently formatted prefetch than what was required to work against 0.4.1?

@mattStorer
Copy link
Author

but thinking about it, it's not like anything having to do with the prefetch should cause the error. the prefetch just determines what's available to the CQL at the time that it's loaded. but if something isn't in the prefetch, the ruler should just go out to the FHIR server to acquire what's missing. the whole workflow shouldn't blow up saying "hey we don't know how to handle $apply-cql anymore". that sounds like it's happening before any CQL execution occurs, doesn't it?

@mattStorer
Copy link
Author

The $apply-cql operation populates prefetch FHIR resource elements using CQL expressions. It was developed mainly to simplify CDS Hooks test cases where date and time elements needed to be maintained.

hm, okay yeah we don't do anything with CQL to populate prefetch resources. we do include resources in the prefetch, but they're all provided statically by our app and embedded into the CDS Hook request.

@c-schuler
Copy link
Contributor

c-schuler commented Jun 21, 2022

does the 0.5.0 release require a differently formatted prefetch than what was required to work against 0.4.1?

It doesn't.

if something isn't in the prefetch, the ruler should just go out to the FHIR server to acquire what's missing.

If the prefetch is populated, the ruler will assume the caller has provided all the necessary/appropriate resources and will not make further requests.

the whole workflow shouldn't blow up saying "hey we don't know how to handle $apply-cql anymore". that sounds like it's happening before any CQL execution occurs, doesn't it?

You're correct that the error is coming back before any CQL execution occurs and that is definitely not ideal. It seems like in the 0.4.1 version of the ruler, the $apply-cql operation ran and just returned the same prefetch elements since there was no CQL to execute. That is why I asked if the way your prefetch data is formatted changed. Since it hasn't, I will need to run some tests on our end to make sure everything is running as expected.

@c-schuler c-schuler self-assigned this Jun 21, 2022
@c-schuler c-schuler added the cds-hooks Cds-hooks implementation label Jun 21, 2022
@c-schuler
Copy link
Contributor

I ran some tests and everything seems to be running as expected. Therefore, I will need more information. Would you mind sharing the PlanDefinitions and Libraries used in this scenario? ([email protected])

@mattStorer
Copy link
Author

does the 0.5.0 release require a differently formatted prefetch than what was required to work against 0.4.1?

It doesn't.

cool, thanks for confirming that!

if something isn't in the prefetch, the ruler should just go out to the FHIR server to acquire what's missing.

If the prefetch is populated, the ruler will assume the caller has provided all the necessary/appropriate resources (per the CDS Hooks spec) and will not make further requests.

yeah, true - as I understand, this occurs on a Resource-by-Resource basis

the whole workflow shouldn't blow up saying "hey we don't know how to handle $apply-cql anymore". that sounds like it's happening before any CQL execution occurs, doesn't it?

You're correct that the error is coming back before any CQL execution occurs and that is definitely not ideal. It seems like in the 0.4.1 version of the ruler, the $apply-cql operation ran and just returned the same prefetch elements since there was no CQL to execute. That is why I asked if the way your prefetch data is formatted changed. Since it hasn't, I will need to run some tests on our end to make sure everything is running as expected.

hm, that may be the case. however, it seems to me that the $apply-cql operation isn't running at all in 0.5.0 when applyCql=true (when false, I'm guessing the ruler doesn't attempt to make the call in the first place).

I'm looking at this line in R4EvaluationContext:
https://github.com/DBCG/cqf-ruler/blob/ada823778dfc58bc3a758fc3aa9591f3239999c7/plugin/cds-hooks/src/main/java/org/opencds/cqf/ruler/cdshooks/evaluation/R4EvaluationContext.java#L39-L40
which appears to define this operation on Bundle.class.

... so why the error "The FHIR endpoint on this server does not know how to handle POST operation[Bundle/$apply-cql] with parameters [[]]" ?

  • is it because this operation still isn't getting registered correctly?
  • is it because the wrong number of parameters are being passed?

I have no idea if the questions above apply, I am not familiar with the inner-workings of the ruler's architecture. this is just where my mind is at.

thoughts?

I appreciate your help figuring this out!

Matt

@c-schuler
Copy link
Contributor

c-schuler commented Jun 21, 2022

To be clear, just because the service is returning an empty array of cards doesn't mean the CQL expressions specified in the PlanDefinition haven't been executed. It could be that the conditions specified in the PlanDefinition haven't been met, which could be due to several different reasons (e.g. the patient data doesn't meet the trigger conditions, the CQL isn't being evaluated correctly, terminology issues, etc...). I would like to determine why the condition isn't triggering.

If it is alright with you, I'd like to move away from discussing the $apply-cql operation since it isn't relevant in this scenario. There may be problems with it in v0.5.0 and I will look into that.

@mattStorer
Copy link
Author

To be clear, just because the service is returning an empty array of cards doesn't mean the CQL expressions specified in the PlanDefinition haven't been executed. It could be that the conditions specified in the PlanDefinition haven't been met, which could be due to several different reasons (e.g. the patient data doesn't meet the trigger conditions, the CQL isn't being evaluated correctly, terminology issues, etc...). I would like to determine why the condition isn't triggering.

that is true, in theory. the patients I'm using as test data are designed to elicit particular responses from the executed recommendation workflows. I've tested with several different patients, all of which should generate something, but none generate anything. so I don't think it's a data issue.

I'm currently trying to get cqf-ruler 0.4.1 running on my system again (my workstation was reimaged a couple weeks ago) to verify precisely what should be coming back for these patients as a response, but I've been running into these annoying Maven errors about "zip END header not found" on a bunch of cqf-ruler's dependencies, I think it could have to do with the Java version I've been using (Java 17 / OpenJ9). I'm downgrading to Java 11 / OpenJ9 to see if it makes a difference.

If it is alright with you, I'd like to move away from discussing the $apply-cql operation since it isn't relevant in this scenario. There may be problems with it in v0.5.0 and I will look into that.

yes thank you, if you're certain the $apply-cql issue is a red herring, I'm happy to move away from it. please keep investigating.

if you would like the associated Libraries, PlanDefinitions, and ValueSets, please let me know and we can figure out getting those to you.

@c-schuler
Copy link
Contributor

c-schuler commented Jun 21, 2022

If you're sure that the test cases are valid and they work in v0.4.1 and aren't working in v0.5.0, then I think I will need to debug the scenarios on my end to determine the issue.

@mattStorer
Copy link
Author

yeah I'm sure that of the three test cases I tested against 0.5.0, for none of them to return anything is extremely extremely suspicious. I wish I could get 0.4.1 to build to generate expected results for you, this "zip END header not found" error during "mvn package" is troublesome. been spending all afternoon debugging this. (grumble)

anyhow.

please see attached for associated vocabulary and resources that get loaded into the ruler and which are involved in the execution of these recommendations, and let me know if there's anything else I can do in the meantime.

resources-and-vocabulary.zip

@c-schuler
Copy link
Contributor

c-schuler commented Jun 22, 2022

Regarding the Monitoring scenario: Based on the prefetch data from the cqf-ruler-localhost-applycql.false-20220621.txt file posted above, the patient doesn't meet the inclusion criteria because there isn't a Condition indicating pre-existing hypertension. I don't see any Condition resources in the prefetch data.

@mattStorer
Copy link
Author

okay, I got cqf-ruler 1.4.1 working again. see the cqf-ruler log file below for an example of it working as expected:
cqfruler-1.4.1-good-example.log

from these logs, we can see that the following is passed as a request for the Monitoring recommendation:

2022-06-22 09:39:32.930 [qtp869944969-30] INFO o.o.cqf.r4.servlet.CdsHooksServlet [CdsHooksServlet.java:134] /cqf-ruler-r4/cds-services/plandefinition-Monitoring
2022-06-22 09:39:32.932 [qtp869944969-30] INFO o.o.cqf.r4.servlet.CdsHooksServlet [CdsHooksServlet.java:151] {"hookInstance":"2fd50ad4-184f-44ba-995a-9e620a9108f9","fhirServer":"https://api.logicahealth.org/htnu18r42/data","hook":"patient-view","applyCql":true,"fhirAuthorization":{"access_token":"eyJqa3UiOiJodHRwczpcL1wvYXV0aC5sb2dpY2FoZWFsdGgub3JnXC9qd2siLCJraWQiOiJyc2ExIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiI1MmY3MGY5Yy0wMDcyLTQ5NjUtYjcwYy1iYTgyOGMwNTA2NjUiLCJpc3MiOiJodHRwczpcL1wvYXV0aC5sb2dpY2FoZWFsdGgub3JnXC8iLCJleHAiOjE2NTU5MTk0MTIsImlhdCI6MTY1NTkxNTgxMiwianRpIjoiZWMzY2FkNTYtMGRiZi00ZDJiLTlhMzQtYTIwNTBkYThkNGM1In0.W-EhSRpyafEeftvxxC0wC7W8jXBnxo83NAvwDsulMlPHacpF8Ta3mlsFDP9njBgqaBGoNokZ-2gTziB1q7TzjArIQO5pNU6fkmSTCgFZsSMfNC28UWS0H4fXTKJHdNT2GEgJTmz-3FDkRIB5atdFQL5sc0AoFaQmXF9PjYcsC8L4x13n-jyYAHWjTQ_h_8KTTwsWP5PuZ5b_YoI9d0i6ma9SqFVN9O_Tsgue_nsiYq9OoRAulrXS-cib1sQJVmjD7Ow5pVpxomauZ2prLCScC6NCL-hBh3CSdVu3aKWpKw-ALSZIhD-bjlgWi7LSJnFu8iudg-icyubqhV5O0zJbqw","token_type":"Bearer","expires_in":300,"scope":"patient/*.read","subject":"cds-service4"},"context":{"userId":"Practitioner/1","patientId":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"prefetch":{"item1":{"response":{"status":"200 OK"},"resource":{"resourceType":"Bundle","type":"collection","entry":[{"resource":{"resourceType":"Encounter","id":"1194","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"HH","display":"home health"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2022-05-01T11:59:00-07:00","end":"2022-05-01T12:01:00-07:00"}}},{"resource":{"resourceType":"Observation","id":"1195","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"extension":[{"url":"http://hl7.org/fhir/us/vitals/StructureDefinition/MeasurementSettingExt","valueCoding":{"system":"http://snomed.info/sct","code":"264362003"}}],"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood pressure systolic and diastolic"},{"system":"urn:oid:1.2.840.114350.1.13.135.3.7.2.707679","code":"343214","display":"Patient Reported BP"}]},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/1194"},"effectiveDateTime":"2022-05-01T12:00:00-07:00","component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic blood pressure"}]},"valueQuantity":{"value":145,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic blood pressure"}]},"valueQuantity":{"value":75,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Observation","id":"1196","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"extension":[{"url":"http://hl7.org/fhir/us/vitals/StructureDefinition/MeasurementSettingExt","valueCoding":{"system":"http://snomed.info/sct","code":"264362003"}}],"status":"final","code":{"coding":[{"system":"http://loinc.org","code":"9855-8","display":"Blood pressure special circumstances"}]},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/1194"},"effectiveDateTime":"2022-05-01T12:00:00-07:00","valueCodeableConcept":{"coding":[{"system":"http://loinc.org","code":"LA46-8","display":"Other, Specify:"}],"text":"Followed BP Protocol"}}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-4","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:21.000+00:00","source":"#8IXbHdrGoRvZIH5U"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-04-26T00:00:00-04:00","end":"2021-04-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-4","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:23.000+00:00","source":"#8qTMe8NIJgRgu6aq"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-4"},"effectiveDateTime":"2021-04-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":70.52660352979804,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":114.65064054117963,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-3","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:22.000+00:00","source":"#AguTZCobpOVviDRw"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-03-26T00:00:00-04:00","end":"2021-03-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-3","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:24.000+00:00","source":"#hzJuBjQrq3EiHDYZ"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-3"},"effectiveDateTime":"2021-03-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":91.45508952819434,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":155.67001870978417,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-2","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:22.000+00:00","source":"#LCgKLAYzNEGqMty9"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-02-26T00:00:00-04:00","end":"2021-02-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-2","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:24.000+00:00","source":"#KkR853XifuKujraw"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-2"},"effectiveDateTime":"2021-02-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":86.995226014274,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":123.4534388828563,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-1","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:21.000+00:00","source":"#l9hkNktM00geBy9r"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-01-26T00:00:00-04:00","end":"2021-01-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-1","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:23.000+00:00","source":"#qN5nZL6Ao4iZ9g5H"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-1"},"effectiveDateTime":"2021-01-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":68.9349105113392,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":121.53332100989888,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"fullUrl":"http://hl7.org/fhir/Goal/bp-goal","resource":{"resourceType":"Goal","id":"bp-goal","lifecycleStatus":"active","achievementStatus":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/goal-achievement","code":"in-progress"}]},"category":[{"coding":[{"system":"http://loinc.org","code":"55284-4"}]}],"description":{"text":"Target BP: 140/90"},"subject":{"reference":"https://api.logicahealth.org/htnu18r42/data/Patient/H-PrescribeAmbulatoryBPMonitoring"},"target":[{"measure":{"coding":[{"system":"http://loinc.org","code":"8480-6"}]},"detailQuantity":{"value":140,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"measure":{"coding":[{"system":"http://loinc.org","code":"8462-4"}]},"detailQuantity":{"value":90,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}],"statusDate":"2022-06-22"}},{"fullUrl":"http://hl7.org/fhir/AdverseEvent/adverseevent-FAKE-HACK","resource":{"resourceType":"AdverseEvent","id":"adverseevent-FAKE-HACK","event":{"coding":[{"system":"https://coach.ohsu.edu","code":"coach-fake-adverse-event","display":"FAKE Adverse Event generated by COACH to prevent CQF-Ruler from querying the FHIR server"}]},"subject":{"reference":"https://api.logicahealth.org/htnu18r42/data/Patient/H-PrescribeAmbulatoryBPMonitoring"},"date":"2022-06-22T09:39:32-07:00"}}]}}}}

and which generates the following expected response:

2022-06-22 09:39:37.030 [qtp869944969-30] INFO o.o.cqf.r4.servlet.CdsHooksServlet [CdsHooksServlet.java:212] {
"cards": [
{
"summary": "Patient did not have a preexisting hypertensive condition.",
"indicator": "info",
"detail": "No Further Action Required.",
"source": {}
}
]
}

(other cards were generated from other recommendations, but I'm not including those for the sake of brevity, and we only need one solid working example as a proof of concept, which the above illustrates nicely)

note that while "applyCql:true" in the above request, I can confirm that in subsequent tests that "applyCql:false" still DOES work and generate cards as expected (so my earlier understanding of what applyCql does is corrected).

loading the same exact patient record into the app, but running against cqf-ruler 0.5.0 instead, the following logs are generated:
cqfruler-0.5.0-bad-example.log

from these, we can see that the following request is passed as a request for the Monitoring recommendation:

2022-06-22 10:05:04.087 [http-nio-8080-exec-6] INFO o.o.c.r.cdshooks.r4.CdsHooksServlet [CdsHooksServlet.java:137] /cds-services/plandefinition-Monitoring
2022-06-22 10:05:04.092 [http-nio-8080-exec-6] INFO o.o.c.r.cdshooks.r4.CdsHooksServlet [CdsHooksServlet.java:153] {"hookInstance":"f2548be0-2727-4610-8755-ab687ed87c4d","fhirServer":"https://api.logicahealth.org/htnu18r42/data","hook":"patient-view","applyCql":false,"fhirAuthorization":{"access_token":"eyJqa3UiOiJodHRwczpcL1wvYXV0aC5sb2dpY2FoZWFsdGgub3JnXC9qd2siLCJraWQiOiJyc2ExIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiI1MmY3MGY5Yy0wMDcyLTQ5NjUtYjcwYy1iYTgyOGMwNTA2NjUiLCJpc3MiOiJodHRwczpcL1wvYXV0aC5sb2dpY2FoZWFsdGgub3JnXC8iLCJleHAiOjE2NTU5MTk0MTIsImlhdCI6MTY1NTkxNTgxMiwianRpIjoiZWMzY2FkNTYtMGRiZi00ZDJiLTlhMzQtYTIwNTBkYThkNGM1In0.W-EhSRpyafEeftvxxC0wC7W8jXBnxo83NAvwDsulMlPHacpF8Ta3mlsFDP9njBgqaBGoNokZ-2gTziB1q7TzjArIQO5pNU6fkmSTCgFZsSMfNC28UWS0H4fXTKJHdNT2GEgJTmz-3FDkRIB5atdFQL5sc0AoFaQmXF9PjYcsC8L4x13n-jyYAHWjTQ_h_8KTTwsWP5PuZ5b_YoI9d0i6ma9SqFVN9O_Tsgue_nsiYq9OoRAulrXS-cib1sQJVmjD7Ow5pVpxomauZ2prLCScC6NCL-hBh3CSdVu3aKWpKw-ALSZIhD-bjlgWi7LSJnFu8iudg-icyubqhV5O0zJbqw","token_type":"Bearer","expires_in":300,"scope":"patient/*.read","subject":"cds-service4"},"context":{"userId":"Practitioner/1","patientId":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"prefetch":{"item1":{"response":{"status":"200 OK"},"resource":{"resourceType":"Bundle","type":"collection","entry":[{"resource":{"resourceType":"Encounter","id":"1194","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"HH","display":"home health"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2022-05-01T11:59:00-07:00","end":"2022-05-01T12:01:00-07:00"}}},{"resource":{"resourceType":"Observation","id":"1195","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"extension":[{"url":"http://hl7.org/fhir/us/vitals/StructureDefinition/MeasurementSettingExt","valueCoding":{"system":"http://snomed.info/sct","code":"264362003"}}],"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood pressure systolic and diastolic"},{"system":"urn:oid:1.2.840.114350.1.13.135.3.7.2.707679","code":"343214","display":"Patient Reported BP"}]},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/1194"},"effectiveDateTime":"2022-05-01T12:00:00-07:00","component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic blood pressure"}]},"valueQuantity":{"value":145,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic blood pressure"}]},"valueQuantity":{"value":75,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Observation","id":"1196","meta":{"versionId":"1","lastUpdated":"2022-05-05T23:19:32.000+00:00","source":"#H85fz5ibYHbBseMT"},"extension":[{"url":"http://hl7.org/fhir/us/vitals/StructureDefinition/MeasurementSettingExt","valueCoding":{"system":"http://snomed.info/sct","code":"264362003"}}],"status":"final","code":{"coding":[{"system":"http://loinc.org","code":"9855-8","display":"Blood pressure special circumstances"}]},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/1194"},"effectiveDateTime":"2022-05-01T12:00:00-07:00","valueCodeableConcept":{"coding":[{"system":"http://loinc.org","code":"LA46-8","display":"Other, Specify:"}],"text":"Followed BP Protocol"}}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-4","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:21.000+00:00","source":"#8IXbHdrGoRvZIH5U"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-04-26T00:00:00-04:00","end":"2021-04-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-4","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:23.000+00:00","source":"#8qTMe8NIJgRgu6aq"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-4"},"effectiveDateTime":"2021-04-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":70.52660352979804,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":114.65064054117963,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-3","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:22.000+00:00","source":"#AguTZCobpOVviDRw"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-03-26T00:00:00-04:00","end":"2021-03-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-3","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:24.000+00:00","source":"#hzJuBjQrq3EiHDYZ"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-3"},"effectiveDateTime":"2021-03-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":91.45508952819434,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":155.67001870978417,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-2","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:22.000+00:00","source":"#LCgKLAYzNEGqMty9"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-02-26T00:00:00-04:00","end":"2021-02-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-2","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:24.000+00:00","source":"#KkR853XifuKujraw"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-2"},"effectiveDateTime":"2021-02-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":86.995226014274,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":123.4534388828563,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"resource":{"resourceType":"Encounter","id":"encounter-H-PrescribeAmbulatoryBPMonitoring-1","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:21.000+00:00","source":"#l9hkNktM00geBy9r"},"status":"finished","class":{"system":"http://terminology.hl7.org/CodeSystem/v3-ActCode","code":"AMB"},"type":[{"coding":[{"system":"http://snomed.info/sct","code":"162673000","display":"General examination of patient (procedure)"}],"text":"General examination of patient (procedure)"}],"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"period":{"start":"2021-01-26T00:00:00-04:00","end":"2021-01-26T23:59:59-04:00"}}},{"resource":{"resourceType":"Observation","id":"observation-H-PrescribeAmbulatoryBPMonitoring-1","meta":{"versionId":"2","lastUpdated":"2021-07-13T04:14:23.000+00:00","source":"#qN5nZL6Ao4iZ9g5H"},"status":"final","category":[{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/observation-category","code":"vital-signs","display":"vital-signs"}]}],"code":{"coding":[{"system":"http://loinc.org","code":"55284-4","display":"Blood Pressure"}],"text":"Blood Pressure"},"subject":{"reference":"Patient/H-PrescribeAmbulatoryBPMonitoring"},"encounter":{"reference":"Encounter/encounter-H-PrescribeAmbulatoryBPMonitoring-1"},"effectiveDateTime":"2021-01-26T15:16:21-05:00","note":[{"text":"Office Blood Pressure Reading"}],"component":[{"code":{"coding":[{"system":"http://loinc.org","code":"8462-4","display":"Diastolic Blood Pressure"}],"text":"Diastolic Blood Pressure"},"valueQuantity":{"value":68.9349105113392,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"code":{"coding":[{"system":"http://loinc.org","code":"8480-6","display":"Systolic Blood Pressure"}],"text":"Systolic Blood Pressure"},"valueQuantity":{"value":121.53332100989888,"unit":"mm[Hg]","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}]}},{"fullUrl":"http://hl7.org/fhir/Goal/bp-goal","resource":{"resourceType":"Goal","id":"bp-goal","lifecycleStatus":"active","achievementStatus":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/goal-achievement","code":"in-progress"}]},"category":[{"coding":[{"system":"http://loinc.org","code":"55284-4"}]}],"description":{"text":"Target BP: 140/90"},"subject":{"reference":"https://api.logicahealth.org/htnu18r42/data/Patient/H-PrescribeAmbulatoryBPMonitoring"},"target":[{"measure":{"coding":[{"system":"http://loinc.org","code":"8480-6"}]},"detailQuantity":{"value":140,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}},{"measure":{"coding":[{"system":"http://loinc.org","code":"8462-4"}]},"detailQuantity":{"value":90,"unit":"mmHg","system":"http://unitsofmeasure.org","code":"mm[Hg]"}}],"statusDate":"2022-06-22"}},{"fullUrl":"http://hl7.org/fhir/AdverseEvent/adverseevent-FAKE-HACK","resource":{"resourceType":"AdverseEvent","id":"adverseevent-FAKE-HACK","event":{"coding":[{"system":"https://coach.ohsu.edu","code":"coach-fake-adverse-event","display":"FAKE Adverse Event generated by COACH to prevent CQF-Ruler from querying the FHIR server"}]},"subject":{"reference":"https://api.logicahealth.org/htnu18r42/data/Patient/H-PrescribeAmbulatoryBPMonitoring"},"date":"2022-06-22T10:05:03-07:00"}}]}}}}

and which generates the following response:

2022-06-22 10:05:05.159 [http-nio-8080-exec-6] INFO o.o.c.r.cdshooks.r4.CdsHooksServlet [CdsHooksServlet.java:228] {
"cards": []
}

(this should generate a card with summary "Patient did not have a preexisting hypertensive condition" as above in the 1.4.1 example, but as you can see, there is nothing here)

hope this helps! please let me know if I can be of any other assistance in sorting this out.

thanks!

@c-schuler
Copy link
Contributor

Thanks Matt. I am investigating the issue.

@c-schuler
Copy link
Contributor

I have tracked down that the following expression is returning null instead of false:

define "Meets Exclusion Criteria":
  Common."Patient Under Age 18"
    or Common."Patient Over Age 80"
    or exists Common."Condition Indicating End Stage Renal Disease"
    or exists Common."Condition Indicating Pregnancy"
    or Common."HTN Crisis"

Causing this expression to also return null:

define "No Entry into Population":
  not "Meets Inclusion Criteria"
    and not "Meets Exclusion Criteria"

I am now looking into why the "Meets Exclusion Criteria" expression is returning null

@c-schuler
Copy link
Contributor

Success! I have generated the desired response from v0.5.0. The issue is that the Patient resource needs to be included in the prefetch resources.

@mattStorer
Copy link
Author

Success! I have generated the desired response from v0.5.0. The issue is that the Patient resource needs to be included in the prefetch resources.

great! glad to hear it.

it's interesting you mention including the Patient resource in the prefetch, I thought we had been doing that, and in fact we were, but I commented out that block of code referencing "nested extensions that CQF Ruler can't handle via prefetch" -

//            compositeBundle.consume(p);       // don't send the patient resource, which contains nested extensions
                                                // that CQF Ruler can't handle via prefetch

I honestly don't recall precisely what these nested extensions were that prompted me to disable this, but I do recall that we did so knowing that cqf-ruler would obtain the Patient resource directly from the FHIR server if it's missing from the prefetch, and it's worked fine without it in the prefetch to date, soo ...

do you know why, specifically, 0.5.0 requires the Patient resource to be in the prefetch?

in any case, thanks! I'm going to test this out and see if it works, will keep you posted

@c-schuler
Copy link
Contributor

c-schuler commented Jun 22, 2022

We changed behavior from v0.4.1 where it would attempt to resolve a partially completed prefetch. That had a lot of drawbacks regarding how that would be determined and performance. So v0.5.0 was updated to assume that if a prefetch was populated it was complete and no requests for resources would be made. Unfortunately, we didn't capture that change in behavior in any of our documentation. We will be updating any relevant documentation to make that behavior clear.

@mattStorer
Copy link
Author

ah, yes that is very useful and important information, thanks for clarifying that modified functionality!

so, to be clear, if there exists even a single resource referenced in the prefetch, cqf-ruler will make no calls to the FHIR server, full stop? as such, to be clear, if ANY resources are populated into the prefetch, ALL resources must be represented there. correct?

is there any way to modify this behavior? it will be troublesome for our app to need to maintain synchronized, detailed knowledge of the resources that the recommendations it references require, and in fact, to need to acquire those resources separately only to pass them into the ruler's prefetch. the app shouldn't need to care about or be bothered with those details. poor encapsulation of concerns and whatnot.

I tested the app against 0.5.0 including the Patient resource in the prefetch, which worked. so yay, it sounds like this issue is resolved. thank you for helping to track this down!

@c-schuler
Copy link
Contributor

so, to be clear, if there exists even a single resource referenced in the prefetch, cqf-ruler will make no calls to the FHIR server, full stop? as such, to be clear, if ANY resources are populated into the prefetch, ALL resources must be represented there. correct?

Correct. If the prefetch is populated the cqf-ruler will assume that it is complete.

is there any way to modify this behavior?

We are aware that behavior is not ideal and are working toward a better solution.

it will be troublesome for our app to need to maintain synchronized, detailed knowledge of the resources that the recommendations it references require, and in fact, to need to acquire those resources separately only to pass them into the ruler's prefetch. the app shouldn't need to care about or be bothered with those details. poor encapsulation of concerns and whatnot.

A possible temporary solution for v0.5.0 might be to not include prefetch resources at all and allow the service to handle prefetch data retrieval. Obviously that will hurt performance, but it does ease the load on the app. We should have this issue resolved in the next release at which point your app can revert to sending partial prefetched data.

I tested the app against 0.5.0 including the Patient resource in the prefetch, which worked. so yay, it sounds like this issue is resolved. thank you for helping to track this down!

That's great! I am glad we got this figured out.

@mattStorer
Copy link
Author

mattStorer commented Jun 23, 2022

We are aware that behavior is not ideal and are working toward a better solution.

cool, I look forward to that better solution.

A possible temporary solution for v0.5.0 might be to not include prefetch resources at all and allow the service to handle prefetch data retrieval. Obviously that will hurt performance, but it does ease the load on the app. We should have this issue resolved in the next release at which point your app can revert to sending partial prefetched data.

negative, this cannot work. our app crafts FHIR resources on the fly that include self-recorded BP measurements, records of having received counseling, experienced adverse events, etc., none of which exist in the source FHIR server. the only solution is to have our app be intimately aware of all the FHIR resources the recommendations require and to act as a middleman to shuttle those resources from the FHIR server to the ruler via prefetch.

perhaps the solution is to just stay on 0.4.1 until the ruler improves. that would be unfortunate but it may be what we need to do :(

@c-schuler
Copy link
Contributor

c-schuler commented Jun 23, 2022

That is unfortunate. We will prioritize getting that functionality implemented. I will create a new issue to capture that (#536). Closing this.

@mattStorer
Copy link
Author

That is unfortunate. We will prioritize getting that functionality implemented. I will create a new issue to capture that (#536). Closing this.

cool, thank you very much! yes, this issue presents a significant metaphorical monkey-wrench into our development process and timelines. we're evaluating options but frankly none of them are good. we sincerely appreciate your attention to resolving this matter!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cds-hooks Cds-hooks implementation
Projects
None yet
Development

No branches or pull requests

2 participants