From 5ce1f1b272d5cfe2f51aff646b0c08389b8ebf34 Mon Sep 17 00:00:00 2001 From: brentlogan Date: Sun, 1 Dec 2024 14:34:12 -0800 Subject: [PATCH 1/8] allow enddate to be NULL --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 6 +++++- .../resources/queries/study/treatmentScheduleUpdate.sql | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index 6a0e2e993..0f920cd6a 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -116,4 +116,8 @@ WHERE (d.lastDayatCenter Is Null or d.lastDayAtCenter > s.enddate) --account for date/time in schedule -and s.date >= s.startDate and s.date <= s.enddate \ No newline at end of file + AND s.date >= s.startDate + AND ( + s.date <= s.enddate + OR s.enddate IS NULL -- some treatment_orders can have NULL enddates + ) diff --git a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql index 4efde2469..4eee69489 100644 --- a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql +++ b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql @@ -115,4 +115,8 @@ WHERE --d.calculated_status = 'Alive' --account for date/time in schedule --and -s.date >= s.startDate and s.date <= s.enddate +s.date >= s.startDate + AND ( + s.date <= s.enddate + OR s.enddate IS NULL -- some treatment_orders can have NULL enddates + ) From 0d148b1fb5c34dc70fd200827128a475ab4f66ad Mon Sep 17 00:00:00 2001 From: brentlogan Date: Wed, 4 Dec 2024 22:00:40 -0800 Subject: [PATCH 2/8] replace enddateCoalesced with alternate --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index 0f920cd6a..adb7b423f 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -85,7 +85,8 @@ FROM ehr_lookups.dateRange dr JOIN study."Treatment Orders" t1 --NOTE: should the enddate consider date/time? - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= t1.enddateCoalesced AND + --The COALESCE enables this query to be return results with s.date in the future and t1.enddate being NULL + ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= COALESCE(t1.enddateCoalesced, dr.dateOnly) AND --technically the first day of the treatment is day 1, not day 0 ( (mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 And t1.frequency.intervalindays is not null And t1.frequency.dayofweek is null ) From 1e108e69a7d64874979a85551679c89e7b6ed4d4 Mon Sep 17 00:00:00 2001 From: brentlogan Date: Thu, 5 Dec 2024 09:06:38 -0800 Subject: [PATCH 3/8] fix typo --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index adb7b423f..61972b236 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -86,7 +86,7 @@ FROM ehr_lookups.dateRange dr JOIN study."Treatment Orders" t1 --NOTE: should the enddate consider date/time? --The COALESCE enables this query to be return results with s.date in the future and t1.enddate being NULL - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= COALESCE(t1.enddateCoalesced, dr.dateOnly) AND + ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= COALESCE(t1.enddate, dr.dateOnly) AND --technically the first day of the treatment is day 1, not day 0 ( (mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 And t1.frequency.intervalindays is not null And t1.frequency.dayofweek is null ) From 7b63dc73dd93e09c77410d08abe9bc53b1823264 Mon Sep 17 00:00:00 2001 From: brentlogan Date: Thu, 5 Dec 2024 11:46:06 -0800 Subject: [PATCH 4/8] cast enddate as DATE --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index 61972b236..0e20cfa79 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -84,9 +84,9 @@ SELECT FROM ehr_lookups.dateRange dr JOIN study."Treatment Orders" t1 - --NOTE: should the enddate consider date/time? - --The COALESCE enables this query to be return results with s.date in the future and t1.enddate being NULL - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= COALESCE(t1.enddate, dr.dateOnly) AND + --COALESCE returns results for treatment orders without an enddate and with s.date in the future. This is needed for + --printable report Clinical Medications + ON (dr.dateOnly >= t1.dateOnly AND dr.dateOnly <= COALESCE(CAST(t1.enddate AS DATE), dr.dateOnly) AND --technically the first day of the treatment is day 1, not day 0 ( (mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 And t1.frequency.intervalindays is not null And t1.frequency.dayofweek is null ) From 6b421f2fa60db024a569b89ed32e9ad2fd23132b Mon Sep 17 00:00:00 2001 From: brentlogan Date: Fri, 13 Dec 2024 19:09:17 -0800 Subject: [PATCH 5/8] Use parallel enddate IS NULL Adopt Ben Bimber's suggestion to modify both enddate comparisons to the same solution and use the one that is transparent about the problem being solved. --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index 0e20cfa79..065a2b281 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -84,9 +84,8 @@ SELECT FROM ehr_lookups.dateRange dr JOIN study."Treatment Orders" t1 - --COALESCE returns results for treatment orders without an enddate and with s.date in the future. This is needed for - --printable report Clinical Medications - ON (dr.dateOnly >= t1.dateOnly AND dr.dateOnly <= COALESCE(CAST(t1.enddate AS DATE), dr.dateOnly) AND + --NOTE: should the enddate consider date/time? + ON (dr.dateOnly >= t1.dateOnly AND (dr.dateOnly <= t1.enddate OR t1.enddate IS NULL) AND --technically the first day of the treatment is day 1, not day 0 ( (mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 And t1.frequency.intervalindays is not null And t1.frequency.dayofweek is null ) From 89236361a382e675f8021006601476ed6a0784d4 Mon Sep 17 00:00:00 2001 From: brentlogan Date: Fri, 13 Dec 2024 19:14:23 -0800 Subject: [PATCH 6/8] Reformat --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index 065a2b281..d1f557669 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -116,8 +116,5 @@ WHERE (d.lastDayatCenter Is Null or d.lastDayAtCenter > s.enddate) --account for date/time in schedule - AND s.date >= s.startDate - AND ( - s.date <= s.enddate - OR s.enddate IS NULL -- some treatment_orders can have NULL enddates - ) + AND s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate IS NULL) -- some treatment_orders can have NULL enddates + From 54be93a6d1076b21febe1cb047d9e55ee9bf04af Mon Sep 17 00:00:00 2001 From: brentlogan Date: Fri, 13 Dec 2024 19:34:20 -0800 Subject: [PATCH 7/8] Accommodate NULL treatment-order enddates --- .../resources/queries/study/TreatmentSchedulePostOps.sql | 4 ++-- .../resources/queries/study/treatmentScheduleMPA.sql | 4 ++-- .../resources/queries/study/treatmentScheduleUpdate.sql | 9 +++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/onprc_ehr/resources/queries/study/TreatmentSchedulePostOps.sql b/onprc_ehr/resources/queries/study/TreatmentSchedulePostOps.sql index ece5f0b8e..dd7919804 100644 --- a/onprc_ehr/resources/queries/study/TreatmentSchedulePostOps.sql +++ b/onprc_ehr/resources/queries/study/TreatmentSchedulePostOps.sql @@ -64,7 +64,7 @@ FROM ( FROM ehr_lookups.dateRange dr Join study."Treatment Orders" t1 - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= t1.enddateCoalesced AND + ON (dr.dateOnly >= t1.dateOnly AND (dr.dateOnly <= t1.enddate OR t1.enddate IS NULL) AND mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 ) @@ -93,7 +93,7 @@ WHERE t1.date is not null ) s ON (s.animalid = h.id) WHERE h.calculated_status = 'Alive' --account for date/time in schedule - and s.date >= s.startDate and s.date <= s.enddate + AND s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate IS NULL) -- /* diff --git a/onprc_ehr/resources/queries/study/treatmentScheduleMPA.sql b/onprc_ehr/resources/queries/study/treatmentScheduleMPA.sql index 56a16d278..2d513e4bb 100644 --- a/onprc_ehr/resources/queries/study/treatmentScheduleMPA.sql +++ b/onprc_ehr/resources/queries/study/treatmentScheduleMPA.sql @@ -62,7 +62,7 @@ FROM study.demographics h JOIN ( FROM ehr_lookups.dateRange dr Join study."Treatment Orders" t1 - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= t1.enddateCoalesced AND + ON (dr.dateOnly >= t1.dateOnly AND (dr.dateOnly <= t1.enddate OR t1.enddate IS NULL) AND mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 ) @@ -92,4 +92,4 @@ WHERE h.calculated_status = 'Alive' --account for date/time in schedule --and s.date >= s.startDate and s.date <= s.enddate --Added the enddate = null clause by Kollil, 10/25/24. Refer to ticket #11471 - and s.date >= s.startDate and (s.date <= s.enddate or s.enddate is null) + AND s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate is null) diff --git a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql index 4eee69489..7e532ef5c 100644 --- a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql +++ b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql @@ -85,7 +85,7 @@ FROM dateRangedata dr JOIN Site.{substitutePath moduleProperty('EHR','EHRStudyContainer')}.study."Treatment Orders" t1 --NOTE: should the enddate consider date/time? - ON (dr.dateOnly >= t1.dateOnly and dr.dateOnly <= t1.enddateCoalesced AND + ON (dr.dateOnly >= t1.dateOnly AND (dr.dateOnly <= t1.enddate OR t1.enddate IS NULL) AND --technically the first day of the treatment is day 1, not day 0 mod(CAST(timestampdiff('SQL_TSI_DAY', CAST(t1.dateOnly as timestamp), dr.dateOnly) as integer), t1.frequency.intervalindays) = 0 OR (t1.frequency.dayofweek is not null And t1.frequency.intervalindays is null And dr.DayOfWeek in (select k.value from onprc_ehr.Frequency_DayofWeek k where k.FreqKey = t1.frequency.rowid )) @@ -115,8 +115,5 @@ WHERE --d.calculated_status = 'Alive' --account for date/time in schedule --and -s.date >= s.startDate - AND ( - s.date <= s.enddate - OR s.enddate IS NULL -- some treatment_orders can have NULL enddates - ) +s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate IS NULL) -- some treatment_orders can have NULL enddates + From c4b120af790b87813d8fc48cd3fb36854e250758 Mon Sep 17 00:00:00 2001 From: brentlogan Date: Fri, 13 Dec 2024 19:37:43 -0800 Subject: [PATCH 8/8] Remove added blank lines --- onprc_ehr/resources/queries/study/treatmentSchedule.sql | 1 - treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql | 1 - 2 files changed, 2 deletions(-) diff --git a/onprc_ehr/resources/queries/study/treatmentSchedule.sql b/onprc_ehr/resources/queries/study/treatmentSchedule.sql index d1f557669..2fc4bc5bd 100644 --- a/onprc_ehr/resources/queries/study/treatmentSchedule.sql +++ b/onprc_ehr/resources/queries/study/treatmentSchedule.sql @@ -117,4 +117,3 @@ WHERE (d.lastDayatCenter Is Null or d.lastDayAtCenter > s.enddate) --account for date/time in schedule AND s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate IS NULL) -- some treatment_orders can have NULL enddates - diff --git a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql index 7e532ef5c..c8e70c90a 100644 --- a/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql +++ b/treatmentETL/resources/queries/study/treatmentScheduleUpdate.sql @@ -116,4 +116,3 @@ WHERE --d.calculated_status = 'Alive' --account for date/time in schedule --and s.date >= s.startDate AND (s.date <= s.enddate OR s.enddate IS NULL) -- some treatment_orders can have NULL enddates -