library Reusable version '1.0.0'
using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1' called FHIRHelpers
include CRCCodeConcept version '1.0.0' called CodeConcept
define "續用註記為1":
exists (
[Claim] C
where exists (
C.item I
where exists (
I.modifier M
where exists (
M.coding Cdg
where Cdg.system = 'https://nhicore.nhi.gov.tw/pas/CodeSystem/nhi-continuation-status'
and Cdg.code in CodeConcept."續用註記為1"
)
)
)
)
//續用判斷
define "續用註記為2":
exists (
[Claim] C
where exists (
C.item I
where exists (
I.modifier M
where exists (
M.coding Cdg
where Cdg.system = 'https://nhicore.nhi.gov.tw/pas/CodeSystem/nhi-continuation-status'
and Cdg.code in CodeConcept."續用註記為2"
)
)
)
)
// 醫令類別=1 (orderType = '1')
define "醫令類別為1":
exists (
[Claim] C
where exists (
C.item I
where exists (
I.productOrService.coding PSC
where PSC.system = 'https://nhicore.nhi.gov.tw/pas/CodeSystem/nhi-order-type'
and PSC.code in CodeConcept."醫令類別"
)
)
)
// 檢查 MedicationRequest 是否有有效的時間資訊
define function "HasValidTiming"(MR MedicationRequest):
MR.dosageInstruction is not null
and Count(MR.dosageInstruction) > 0
and MR.dosageInstruction[0].timing is not null
and MR.dosageInstruction[0].timing.repeat is not null
and MR.dosageInstruction[0].timing.repeat.bounds is Period
and (MR.dosageInstruction[0].timing.repeat.bounds as Period).start is not null
and (MR.dosageInstruction[0].timing.repeat.bounds as Period).end is not null
// 取得 MedicationRequest 的起始時間
define function "GetStartTime"(MR MedicationRequest):
(MR.dosageInstruction[0].timing.repeat.bounds as Period).start
// 取得 MedicationRequest 的結束時間
define function "GetEndTime"(MR MedicationRequest):
(MR.dosageInstruction[0].timing.repeat.bounds as Period).end
// 檢查 Plan 的時間範圍是否在 Order 的時間範圍內
define function "PlanTimeWithinOrderTime"(MRPlan MedicationRequest, MROrder MedicationRequest):
"HasValidTiming"(MRPlan)
and "HasValidTiming"(MROrder)
and "GetStartTime"(MRPlan) >= "GetStartTime"(MROrder)
and "GetStartTime"(MRPlan) <= "GetEndTime"(MROrder)
and "GetEndTime"(MRPlan) >= "GetStartTime"(MROrder)
and "GetEndTime"(MRPlan) <= "GetEndTime"(MROrder)
// 檢查兩個藥物的時間範圍是否重疊
define function "MedicationTimesOverlap"(MR1 MedicationRequest, MR2 MedicationRequest):
"HasValidTiming"(MR1) and "HasValidTiming"(MR2)
and "GetStartTime"(MR1) <= "GetEndTime"(MR2)
and "GetEndTime"(MR1) >= "GetStartTime"(MR2)
|