Requisition Therapeutic Drug Monitoring Extension¶
| Canonical | ../StructureDefinition/nexus-requisition-tdm |
|---|---|
| Status | draft · 1.26.0 |
| Base | Extension (constraint) |
| Context | ServiceRequest (element) |
| Source | FSH · JSON |
One therapeutic-drug-monitoring block on a laboratory requisition: the monitored drug and the collection, last-dose and next-dose times a serum level must be interpreted against.
FSH
The authored source of truth: extensions/RequisitionTdmExtension.fsh (edit on GitHub). One FSH file may define several related artifacts.
// RequisitionTdmExtension.fsh
// Therapeutic drug monitoring on a laboratory requisition: which drug, and the three clock times a
// level has to be read against.
//
// WHAT THIS RECORDS. The provincial laboratory requisition prints a drug-monitoring block: a drug
// name, the time the specimen was collected, the time of the last dose and the time of the next
// one. A serum level is uninterpretable without them -- the same number is therapeutic at trough
// and toxic at peak -- so they are part of the order, not a note about it. R4 `ServiceRequest` has
// no element for any of the four.
//
// IT REPEATS, ONCE PER BLOCK. The printed form rules TWO drug-monitoring blocks, and a clinician
// may fill in both. The extension repeats at the root of the requisition rather than growing
// indexed sub-parts, which is how FHIR says "more than one of these" -- and it leaves a consumer
// that only expects one block still reading the first one correctly.
//
// THE TIMES ARE STRINGS, AND DELIBERATELY SO. Each is the four-digit 24-hour clock reading typed
// into the box, `HHMM`, with no date and no zone. It is not a FHIR `time` and it is not a
// `dateTime`. The clinician wrote a wall-clock time whose date is implied by the requisition and
// whose zone is the clinic's; typing it into a zoned instant would assert precision nobody entered.
// The contained `Specimen` carries the real collection instant as a proper `collectedDateTime`,
// and that -- not this -- is the element a consumer should compute against.
//
// EVERY PART IS OPTIONAL, BUT AN EMPTY BLOCK IS NEVER WRITTEN. A producer writes the extension only
// when at least one of the four boxes was filled in, so an occurrence with no sub-extensions at all
// does not occur. Which of the four are present is the clinician's own partial entry and is not an
// error.
Extension: NexusRequisitionTdm
Id: nexus-requisition-tdm
Title: "Requisition Therapeutic Drug Monitoring Extension"
Description: """
One therapeutic-drug-monitoring block on a laboratory requisition: the monitored drug and the
collection, last-dose and next-dose times a serum level must be interpreted against.
**It repeats, once per block.** The printed requisition rules two drug-monitoring blocks. Each block
a clinician filled in is written as its own occurrence of this extension, in the order the form
prints them. A consumer that reads only the first occurrence reads the first block correctly.
**The three times are four-digit 24-hour clock readings (`HHMM`) held as strings**, not FHIR `time`
or `dateTime` values. They carry no date and no timezone: the clinician typed a wall-clock reading,
and this preserves it as typed. Where a real collection instant is needed, read
`collection.collectedDateTime` on the `Specimen` contained in the requisition, which is a
fully-qualified zoned dateTime.
**Every part is optional; an empty block is not written.** A producer emits an occurrence only when
at least one of the four boxes was filled in, so an occurrence always carries something. A block
with a drug and a collection time but no dose times is an ordinary partial entry, not an error.
**It is on the order, and only on the order.** The monitoring times are not echoed onto the
`DiagnosticReport` the requisition eventually produces; a consumer interpreting a level has to read
them from the order.
"""
* ^url = "../StructureDefinition/nexus-requisition-tdm"
* ^status = #draft
* ^context[0].type = #element
* ^context[0].expression = "ServiceRequest"
* . ^short = "One drug-monitoring block: the drug, and the collection / last-dose / next-dose times"
* value[x] 0..0
* extension contains
drug 0..1 MS and
timeCollected 0..1 MS and
lastDose 0..1 MS and
nextDose 0..1 MS
* extension[drug].value[x] only string
* extension[drug] ^short = "The monitored drug, as typed onto the form"
* extension[drug] ^definition = "The drug whose level is being monitored, exactly as typed onto the requisition. Free text: it is not coded, not matched against a medication list, and not to be read as a resolvable medication."
* extension[timeCollected].value[x] only string
* extension[timeCollected] ^short = "Time the specimen was collected -- 24-hour `HHMM`, as typed"
* extension[timeCollected] ^definition = "The time the specimen was collected, as the four-digit 24-hour clock reading typed onto the form (for example `0730`). No date and no timezone. This is not a FHIR `time` value. The requisition's contained `Specimen` carries the fully-qualified collection instant."
* extension[lastDose].value[x] only string
* extension[lastDose] ^short = "Time of the last dose -- 24-hour `HHMM`, as typed"
* extension[lastDose] ^definition = "The time the patient's last dose was taken, as the four-digit 24-hour clock reading typed onto the form. No date and no timezone; it is not a FHIR `time` value."
* extension[nextDose].value[x] only string
* extension[nextDose] ^short = "Time of the next dose -- 24-hour `HHMM`, as typed"
* extension[nextDose] ^definition = "The time the patient's next dose is due, as the four-digit 24-hour clock reading typed onto the form. No date and no timezone; it is not a FHIR `time` value."