2018年12月28日 星期五

HL7 FHIR 資料型態篇 - Complex Types - 時間類


Period

NameFlagsCard.TypeDescription & Constraints
.. PeriodΣINElementTime range defined by start and end date/time
+ Rule: If present, start SHALL have a lower value than end
Elements defined in Ancestors: idextension
... startΣI0..1dateTimeStarting time with inclusive boundary
... endΣI0..1dateTimeEnd time with inclusive boundary, if not ongoing
給定開始與結束的時間。
之前有個Duration的Profile層級的資料型態。跟這個不一樣喔。Duration是指這段期間的長度,還是衍生自Quantity。

Timing

這是個很複雜的Type,卻應用在很多地方:
Dosage, TriggerDefinition, ActivityDefinition, CarePlan, ChargeItem, Contract, DeviceMetric, DeviceRequest, DeviceUseStatement, EvidenceVariable, NutritionOrder, Observation, PlanDefinition, RequestGroup, ResearchElementDefinition, ServiceRequest, SupplyDelivery, SupplyRequest and VerificationResult而且他還包含了一個Repeat Type(Element)。總之,一定要搞懂。
NameFlagsCard.TypeDescription & Constraints
.. TimingΣNBackBoneElementA timing schedule that specifies an event that may occur multiple times
Elements defined in Ancestors: idextensionmodifierExtension
... eventΣ0..*dateTimeWhen the event occurs
... repeatΣI0..1ElementWhen the event is to occur
+ Rule: if there's a duration, there needs to be duration units
+ Rule: if there's a period, there needs to be period units
+ Rule: duration SHALL be a non-negative value
+ Rule: period SHALL be a non-negative value
+ Rule: If there's a periodMax, there must be a period
+ Rule: If there's a durationMax, there must be a duration
+ Rule: If there's a countMax, there must be a count
+ Rule: If there's an offset, there must be a when (and not C, CM, CD, CV)
+ Rule: If there's a timeOfDay, there cannot be a when, or vice versa
.... bounds[x]Σ0..1Length/Range of lengths, or (Start and/or end) limits
..... boundsDurationDuration
..... boundsRangeRange
..... boundsPeriodPeriod
.... countΣ0..1positiveIntNumber of times to repeat
.... countMaxΣ0..1positiveIntMaximum number of times to repeat
.... durationΣ0..1decimalHow long when it happens
.... durationMaxΣ0..1decimalHow long when it happens (Max)
.... durationUnitΣ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... frequencyΣ0..1positiveIntEvent occurs frequency times per period
.... frequencyMaxΣ0..1positiveIntEvent occurs up to frequencyMax times per period
.... periodΣ0..1decimalEvent occurs frequency times per period
.... periodMaxΣ0..1decimalUpper limit of period (3-4 hours)
.... periodUnitΣ0..1codes | min | h | d | wk | mo | a - unit of time (UCUM)
UnitsOfTime (Required)
.... dayOfWeekΣ0..*codemon | tue | wed | thu | fri | sat | sun
DaysOfWeek (Required)
.... timeOfDayΣ0..*timeTime of day for action
.... whenΣ0..*codeCode for time period of occurrence
EventTiming (Required)
.... offsetΣ0..1unsignedIntMinutes from event (before or after)
... codeΣ0..1CodeableConceptBID | TID | QID | AM | PM | QD | QOD | +
TimingAbbreviation (Preferred)
請注意一下,Timing跟其他的Data Type有點不同,他是繼承於BackBoneElement。至於,有什麼差異,得讓我到了Extension那邊時,再好好解釋。(坦白說,目前我還沒有研究透徹)
下列欄位說明,若不是很清楚,請勿擔心。那是我英文程度不好,屆時看範例會比較清楚。

  • Timing.event:dataTime [0..*]

用來表達事件發生時,會有哪個特定的時間點。

  • Timing.repeat:Repeat [0..1]
此Element乃Composition類別。
  • Timing.repeat.bounds[x] : [0..1]
    • boundsDuration: Duration
    • boundsRange: Range
    • boundsPeriod: Period
先定義這個「重複時間」是採用什麼模式。
Duration很單純是一個期間數值。
Range則是採用低值與高值來定義期間。
Period則是採用開始時間與結束時間來定義期間。
  • Timing.repeat.count: positiveInt [0..1]
重複了幾次。
  • Timing.repeat.countMax: positiveInt [0..1]
最多可以重複幾次。
  • Timing.repeat.duration: decimal [0..1]
若事件發生時,會持續多久。若durationMax有值,那這裡代表最少要能持續多久。
  • Timing.repeat.durationMax: decimal [0..1]
最久能持續多久。
  • Timing.repeat.durationUnit: code(UnitsOfTime) [0..1]
這個持續時間的單位是什麼。(有點討厭,跟寫程式的認知不同)
    • s:秒
    • min: 分鐘
    • h: 小時
    • d: 天
    • wk: 星期
    • mo: 月
    • a: 年
  • Timing.repeat.frequency: positiveInt [0..1]
在一定期間內,重複操作的次數。若frequencyMax有值,這代表最少重複次數。
  • Timing.repeat.frequencyMax: positiveInt [0..1]
在一定期間內,最多可重複操作的次數。
  • Timing.repeat.period: decimal [0..1]
可重複發生的期間。要看英文比較清楚”3 times per day” 意思是說每天3次。這個3是放在frequency,這個每天,也就是1天的意思,這個1就是放在這裡period。
若periodMax有值,那這代表至少。
  • Timing.repeat.periodMax: positiveInt [0..1]
最多可重複發生的期間。
  • Timing.repeat.periodUnit: code(UnitsOfTime) [0..1]
期間所使用之單位。
  • Timing.repeat.dayOfWeek: code(DaysOfWeek) [0..*]
若有指定值,那事件發生就在特定的日子。所用到的編碼有:
    • mon: 星期一
    • tue: 星期二
    • wed: 星期三
    • thu: 星期四
    • fri: 星期五
    • sat: 星期六
    • sun: 星期日
  • Timing.repeat.timeOfDay: time [0..*]
事件發生在該日的哪個時間點。
  • Timing.repeat.when: code(EventTiming) [0..*]
定義事件發生的時間點,或者應該說是情境。EventTiming這個Value-Set有來自不同的Code-System。下列主要是來自http://terminology.hl7.org/CodeSystem/v3-TimingEvent
這個Code system。


    • HS:事件在睡眠時間(或嘗試)之前發生[偏移]
    • WAKE:事件在醒來後發生[offset]
    • C:事件發生在一頓飯(來自拉丁語cibus)
    • CM:事件發生在早餐(來自拉丁語cibus matutinus)
    • CD:事件發生在午餐時間(來自拉丁語cibus diurnus)
    • CV:事件發生在晚餐時間(來自拉丁語ante cibus vespertinus)
    • AC:事件在用餐前發生 [偏移](來自拉丁語ante cibus)
    • ACM:事件在早餐前發生 [偏移](來自拉丁語ante cibus matutinus)
    • ACD:事件在午餐前發生 [偏移](來自拉丁語ante cibus diurnus)
    • ACV:事件在晚餐前發生 [偏移](來自拉丁語ante cibus vespertinus)
    • PC:事件發生在飯後 [偏移](來自拉丁文後cibus)
    • PCM:事件在早餐後發生[偏移](來自拉丁文post cibus matutinus)
    • PCD:事件在午餐後發生[偏移](來自拉丁文cibus diurnus)
    • PCV PCV事件在晚餐後發生[偏移](來自拉丁文post cibus vespertinus)
其中偏移的意思,例如飯後30分鐘,30分鐘就是偏移。

  • Timing.repeat.offset: unsignedInt [0..1]
就是偏移量。注意單位是分鐘。
  • Timing.code: CodeableConcept [0..1]
前面搞這麼多,但是實際醫療院所所使用的是什麼呢?利用這來說明。

這個Data Type真的不好搞定。官方文件有一個表格,能夠說明各個Element的用法。因為,貼在這兒的效果不好,還是請至官方文件查看。

沒有留言:

張貼留言