Medication IG DE
2.0.0-ballot - ballot

Medication IG DE, published by HL7 Deutschland e.V.. This guide is not an authorized publication; it is the continuous build for version 2.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/hl7germany/medication-ig-de-r4/ and changes regularly. See the Directory of published versions

Resource Profile: Medication Statement dgMP ( Abstract )

Official URL: http://ig.fhir.de/igs/medication/StructureDefinition/MedicationStatementDgMP Version: 2.0.0-ballot
Active as of 2026-10-15 Computable Name: MedicationStatementDgMP

Dieses Profil dient ausschließlich der Validierung des Implementation Guides und ist nicht für den produktiven Einsatz gedacht. Stattdessen sollte das jeweils passende Dosage-Profil direkt in das eigene Profil eingebunden werden.

Verwendung

Dieses Profil dient ausschließlich der Validierung des Implementation Guides und ist nicht für den produktiven Einsatz gedacht

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
Constraints: ext-1
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
Slice: Unordered, Open by value:url
Constraints: ext-1

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction"
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
MedicationStatement.status This element is a modifier element. This element is included in summaries. 1..1 code active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
Binding: Medication Status Codes (required): A coded concept indicating the current status of a MedicationStatement.
MedicationStatement.medication[x] This element is included in summaries. 1..1 What medication was taken
Binding: SNOMEDCTMedicationCodes (example): A coded concept identifying the substance or product being taken.
MedicationStatement.medication[x].medicationCodeableConcept CodeableConcept
MedicationStatement.medication[x].medicationReference Reference(Medication)
MedicationStatement.subject This element is included in summaries. 1..1 Reference(Patient | Group) Who is/was taking the medication
MedicationStatement.dosage C 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageLimitsPositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, AsNeededForRequiresAsNeededWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageLimitsPositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDoseNotBelowDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
MedicationStatement.​status Base required Medication status codes 📍4.0.1 FHIR Std.
MedicationStatement.​medication[x] Base example SNOMED CT Medication Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error MedicationStatement.dosage The reason for use (asNeededFor) must be populated identically across all Dosage elements of a resource. Multiple reasons per element are allowed but must then match in every element. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error MedicationStatement.dosage A reason for use (asNeededFor) may only be given for an as-needed dosage (asNeededBoolean = true). extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededForRequiresAsNeededWarning warning MedicationStatement.dosage A reason for use (asNeededFor) should only be given together with asNeededBoolean = true. extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededIdentical error MedicationStatement.dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error MedicationStatement.dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error MedicationStatement.dosage Dose values in doseQuantity or doseRange must be whole numbers or use one of the following fractional parts: .25, .33, .5, .66 or .75. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) )
DosageDoseUnitSameCode error MedicationStatement.dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning MedicationStatement.dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error MedicationStatement.dosage Dose values in doseQuantity or doseRange must use plain decimal notation with at most two decimal places. Exponential notation (e.g. 50e-2 instead of 0.5) is not allowed. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) )
DosageDoseValuePositive error MedicationStatement.dosage doseQuantity.value and doseRange.high.value must be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageDoseValuePositiveWarning warning MedicationStatement.dosage doseQuantity.value and doseRange.high.value should be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageFourSlotPatternInText error MedicationStatement.dosage A bare four-slot dosing schema (Viererschema, e.g. 1-0-1-0 or 1-0-1-0 Stück) must not be given as free text in Dosage.text; it has to be represented structurally. text.exists() implies text.matches('^\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?(\\s*[-–]\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?){3}(\\s*[A-Za-zÄÖÜäöüß().]+)?\\s*$').not()
DosageFourSlotPatternInTextWarning warning MedicationStatement.dosage A four-slot dosing schema (Viererschema, e.g. 1-1-1-1) was detected in Dosage.text. Please check whether it can be represented structurally. text.exists() implies text.matches('.*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+.*').not()
DosageLimitsPositive error MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) must be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageLimitsPositiveWarning warning MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) should be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageRequiresGeneratedText error MedicationStatement.dosage Regardless of the kind of dosage (structured or free text), the GeneratedDosageInstructionsMeta and renderedDosageInstruction extensions must be present. %resource.extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' ).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() )
DosageStructuredOrFreeText error MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DoseRangeHighRequiredWhenLowPresent error MedicationStatement.dosage If a lower bound is given for doseRange, an upper bound must be given as well. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.exists()
DoseRangeLowAndHighSameUnit error MedicationStatement.dosage The lower and upper bound of a variable single dose must use the same unit of measure. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).low.system = doseAndRate.dose.ofType(Range).high.system and doseAndRate.dose.ofType(Range).low.code = doseAndRate.dose.ofType(Range).high.code and doseAndRate.dose.ofType(Range).low.unit = doseAndRate.dose.ofType(Range).high.unit )
DoseRangeNoVarPeriod warning MedicationStatement.dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()
FreeTextMatchesRenderedText error MedicationStatement.dosage If a dosage is given as pure free text (text present, timing and doseAndRate empty), the value in dosageInstruction.text must match the value in the renderedDosageInstruction extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationDispense).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationStatement).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).value = %resource.dosage.text ) )
FreeTextSingleDosageOnly error MedicationStatement.dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning MedicationStatement.dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseNotBelowDose error MedicationStatement.dosage maxDosePerPeriod.numerator.value must not be smaller than the single dose (doseQuantity.value or doseRange.high.value). maxDosePerPeriod.numerator.value.empty() or ( (doseAndRate.dose.ofType(Quantity).value.empty() or doseAndRate.dose.ofType(Quantity).value <= maxDosePerPeriod.numerator.value) and (doseAndRate.dose.ofType(Range).high.value.empty() or doseAndRate.dose.ofType(Range).high.value <= maxDosePerPeriod.numerator.value) )
MaxDoseOnlyPureAsNeeded error MedicationStatement.dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error MedicationStatement.dosage maxDosePerPeriod is only allowed with a reference period of 24 hours (24 h) or 1 day (1 d). Other periods (e.g. at most 3 every 6 h) are not allowed. maxDosePerPeriod.empty() or ( (maxDosePerPeriod.denominator.value = 24 and maxDosePerPeriod.denominator.code = 'h') or (maxDosePerPeriod.denominator.value = 1 and maxDosePerPeriod.denominator.code = 'd') )
MaxDoseSameUnitAsDose error MedicationStatement.dosage maxDosePerPeriod must use the same unit, code and system as doseQuantity. maxDosePerPeriod.empty() or ( ( doseAndRate.dose.ofType(Quantity).exists() and doseAndRate.dose.ofType(Quantity).system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Quantity).code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Quantity).unit = maxDosePerPeriod.numerator.unit ) or ( doseAndRate.dose.ofType(Range).exists() and ( doseAndRate.dose.ofType(Range).low.empty() or ( doseAndRate.dose.ofType(Range).low.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).low.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).low.unit = maxDosePerPeriod.numerator.unit ) ) and ( doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).high.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).high.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).high.unit = maxDosePerPeriod.numerator.unit ) ) ) )
MinimumIntervalOnlyPureAsNeeded error MedicationStatement.dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error MedicationStatement.dosage The display unit of the minimum interval (valueDuration.unit) must match the UCUM code (e.g. 'Stunde(n)' only with code='h'). modifierExtension.where( url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).all( ( code = 'min' implies (unit = 'Minute(n)' or unit = 'Minute' or unit = 'Minuten') ) and ( code = 'h' implies (unit = 'Stunde(n)' or unit = 'Stunde' or unit = 'Stunden') ) )
PatientInstructionIdentical error MedicationStatement.dosage If patientInstruction is used in a resource with multiple dosages, the field must be populated identically in all Dosage elements. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error MedicationStatement.dosage AsNeededFor can only be set if AsNeeded is empty or true extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').empty() or asNeeded.empty() or asNeeded
dom-2 error MedicationStatement If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error MedicationStatement If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice MedicationStatement A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from MedicationStatement

NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.dosage 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext

doco Documentation for this format

Constraints

Id Grade Path(s) Description Expression
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()
NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.id This element is included in summaries. 0..1 id Logical id of this artifact
MedicationStatement.meta This element is included in summaries. 0..1 Meta Metadata about the resource
MedicationStatement.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
MedicationStatement.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
MedicationStatement.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
MedicationStatement.contained 0..* Resource Contained, inline Resources
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
Constraints: ext-1
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.id 0..1 string Unique id for inter-element referencing
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
Slice: Unordered, Open by value:url
Constraints: ext-1

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction"
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
MedicationStatement.identifier This element is included in summaries. 0..* Identifier External identifier
MedicationStatement.basedOn This element is included in summaries. 0..* Reference(MedicationRequest | CarePlan | ServiceRequest) Fulfils plan, proposal or order
MedicationStatement.partOf This element is included in summaries. 0..* Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Observation) Part of referenced event
MedicationStatement.status This element is a modifier element. This element is included in summaries. 1..1 code active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
Binding: Medication Status Codes (required): A coded concept indicating the current status of a MedicationStatement.
MedicationStatement.statusReason 0..* CodeableConcept Reason for current status
Binding: SNOMEDCTDrugTherapyStatusCodes (example): A coded concept indicating the reason for the status of the statement.
MedicationStatement.category This element is included in summaries. 0..1 CodeableConcept Type of medication usage
Binding: Medication usage category codes (preferred): A coded concept identifying where the medication included in the MedicationStatement is expected to be consumed or administered.
MedicationStatement.medication[x] This element is included in summaries. 1..1 What medication was taken
Binding: SNOMEDCTMedicationCodes (example): A coded concept identifying the substance or product being taken.
MedicationStatement.medication[x].medicationCodeableConcept CodeableConcept
MedicationStatement.medication[x].medicationReference Reference(Medication)
MedicationStatement.subject This element is included in summaries. 1..1 Reference(Patient | Group) Who is/was taking the medication
MedicationStatement.context This element is included in summaries. 0..1 Reference(Encounter | EpisodeOfCare) Encounter / Episode associated with MedicationStatement
MedicationStatement.effective[x] This element is included in summaries. 0..1 The date/time or interval when the medication is/was/will be taken
MedicationStatement.effective[x].effectiveDateTime dateTime
MedicationStatement.effective[x].effectivePeriod Period
MedicationStatement.dateAsserted This element is included in summaries. 0..1 dateTime When the statement was asserted?
MedicationStatement.informationSource 0..1 Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Organization) Person or organization that provided the information about the taking of this medication
MedicationStatement.derivedFrom 0..* Reference(Resource) Additional supporting information
MedicationStatement.reasonCode 0..* CodeableConcept Reason for why the medication is being/was taken
Binding: Condition/Problem/DiagnosisCodes (example): A coded concept identifying why the medication is being taken.
MedicationStatement.reasonReference 0..* Reference(Condition | Observation | DiagnosticReport) Condition or observation that supports why the medication is being/was taken
MedicationStatement.note 0..* Annotation Further information about the statement
MedicationStatement.dosage C 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageLimitsPositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, AsNeededForRequiresAsNeededWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageLimitsPositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDoseNotBelowDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
MedicationStatement.​language Base preferred Common Languages 📍4.0.1 FHIR Std.
MedicationStatement.​status Base required Medication status codes 📍4.0.1 FHIR Std.
MedicationStatement.​statusReason Base example SNOMED CT Drug Therapy Status codes 📍4.0.1 FHIR Std.
MedicationStatement.​category Base preferred Medication usage category codes 📍4.0.1 FHIR Std.
MedicationStatement.​medication[x] Base example SNOMED CT Medication Codes 📍4.0.1 FHIR Std.
MedicationStatement.​reasonCode Base example Condition/Problem/Diagnosis Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error MedicationStatement.dosage The reason for use (asNeededFor) must be populated identically across all Dosage elements of a resource. Multiple reasons per element are allowed but must then match in every element. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error MedicationStatement.dosage A reason for use (asNeededFor) may only be given for an as-needed dosage (asNeededBoolean = true). extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededForRequiresAsNeededWarning warning MedicationStatement.dosage A reason for use (asNeededFor) should only be given together with asNeededBoolean = true. extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededIdentical error MedicationStatement.dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error MedicationStatement.dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error MedicationStatement.dosage Dose values in doseQuantity or doseRange must be whole numbers or use one of the following fractional parts: .25, .33, .5, .66 or .75. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) )
DosageDoseUnitSameCode error MedicationStatement.dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning MedicationStatement.dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error MedicationStatement.dosage Dose values in doseQuantity or doseRange must use plain decimal notation with at most two decimal places. Exponential notation (e.g. 50e-2 instead of 0.5) is not allowed. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) )
DosageDoseValuePositive error MedicationStatement.dosage doseQuantity.value and doseRange.high.value must be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageDoseValuePositiveWarning warning MedicationStatement.dosage doseQuantity.value and doseRange.high.value should be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageFourSlotPatternInText error MedicationStatement.dosage A bare four-slot dosing schema (Viererschema, e.g. 1-0-1-0 or 1-0-1-0 Stück) must not be given as free text in Dosage.text; it has to be represented structurally. text.exists() implies text.matches('^\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?(\\s*[-–]\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?){3}(\\s*[A-Za-zÄÖÜäöüß().]+)?\\s*$').not()
DosageFourSlotPatternInTextWarning warning MedicationStatement.dosage A four-slot dosing schema (Viererschema, e.g. 1-1-1-1) was detected in Dosage.text. Please check whether it can be represented structurally. text.exists() implies text.matches('.*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+.*').not()
DosageLimitsPositive error MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) must be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageLimitsPositiveWarning warning MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) should be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageRequiresGeneratedText error MedicationStatement.dosage Regardless of the kind of dosage (structured or free text), the GeneratedDosageInstructionsMeta and renderedDosageInstruction extensions must be present. %resource.extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' ).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() )
DosageStructuredOrFreeText error MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DoseRangeHighRequiredWhenLowPresent error MedicationStatement.dosage If a lower bound is given for doseRange, an upper bound must be given as well. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.exists()
DoseRangeLowAndHighSameUnit error MedicationStatement.dosage The lower and upper bound of a variable single dose must use the same unit of measure. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).low.system = doseAndRate.dose.ofType(Range).high.system and doseAndRate.dose.ofType(Range).low.code = doseAndRate.dose.ofType(Range).high.code and doseAndRate.dose.ofType(Range).low.unit = doseAndRate.dose.ofType(Range).high.unit )
DoseRangeNoVarPeriod warning MedicationStatement.dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()
FreeTextMatchesRenderedText error MedicationStatement.dosage If a dosage is given as pure free text (text present, timing and doseAndRate empty), the value in dosageInstruction.text must match the value in the renderedDosageInstruction extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationDispense).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationStatement).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).value = %resource.dosage.text ) )
FreeTextSingleDosageOnly error MedicationStatement.dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning MedicationStatement.dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseNotBelowDose error MedicationStatement.dosage maxDosePerPeriod.numerator.value must not be smaller than the single dose (doseQuantity.value or doseRange.high.value). maxDosePerPeriod.numerator.value.empty() or ( (doseAndRate.dose.ofType(Quantity).value.empty() or doseAndRate.dose.ofType(Quantity).value <= maxDosePerPeriod.numerator.value) and (doseAndRate.dose.ofType(Range).high.value.empty() or doseAndRate.dose.ofType(Range).high.value <= maxDosePerPeriod.numerator.value) )
MaxDoseOnlyPureAsNeeded error MedicationStatement.dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error MedicationStatement.dosage maxDosePerPeriod is only allowed with a reference period of 24 hours (24 h) or 1 day (1 d). Other periods (e.g. at most 3 every 6 h) are not allowed. maxDosePerPeriod.empty() or ( (maxDosePerPeriod.denominator.value = 24 and maxDosePerPeriod.denominator.code = 'h') or (maxDosePerPeriod.denominator.value = 1 and maxDosePerPeriod.denominator.code = 'd') )
MaxDoseSameUnitAsDose error MedicationStatement.dosage maxDosePerPeriod must use the same unit, code and system as doseQuantity. maxDosePerPeriod.empty() or ( ( doseAndRate.dose.ofType(Quantity).exists() and doseAndRate.dose.ofType(Quantity).system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Quantity).code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Quantity).unit = maxDosePerPeriod.numerator.unit ) or ( doseAndRate.dose.ofType(Range).exists() and ( doseAndRate.dose.ofType(Range).low.empty() or ( doseAndRate.dose.ofType(Range).low.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).low.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).low.unit = maxDosePerPeriod.numerator.unit ) ) and ( doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).high.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).high.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).high.unit = maxDosePerPeriod.numerator.unit ) ) ) )
MinimumIntervalOnlyPureAsNeeded error MedicationStatement.dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error MedicationStatement.dosage The display unit of the minimum interval (valueDuration.unit) must match the UCUM code (e.g. 'Stunde(n)' only with code='h'). modifierExtension.where( url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).all( ( code = 'min' implies (unit = 'Minute(n)' or unit = 'Minute' or unit = 'Minuten') ) and ( code = 'h' implies (unit = 'Stunde(n)' or unit = 'Stunde' or unit = 'Stunden') ) )
PatientInstructionIdentical error MedicationStatement.dosage If patientInstruction is used in a resource with multiple dosages, the field must be populated identically in all Dosage elements. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error MedicationStatement.dosage AsNeededFor can only be set if AsNeeded is empty or true extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').empty() or asNeeded.empty() or asNeeded
dom-2 error MedicationStatement If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error MedicationStatement If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice MedicationStatement A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from MedicationStatement

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
Constraints: ext-1
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
Slice: Unordered, Open by value:url
Constraints: ext-1

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction"
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
MedicationStatement.status This element is a modifier element. This element is included in summaries. 1..1 code active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
Binding: Medication Status Codes (required): A coded concept indicating the current status of a MedicationStatement.
MedicationStatement.medication[x] This element is included in summaries. 1..1 What medication was taken
Binding: SNOMEDCTMedicationCodes (example): A coded concept identifying the substance or product being taken.
MedicationStatement.medication[x].medicationCodeableConcept CodeableConcept
MedicationStatement.medication[x].medicationReference Reference(Medication)
MedicationStatement.subject This element is included in summaries. 1..1 Reference(Patient | Group) Who is/was taking the medication
MedicationStatement.dosage C 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageLimitsPositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, AsNeededForRequiresAsNeededWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageLimitsPositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDoseNotBelowDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
MedicationStatement.​status Base required Medication status codes 📍4.0.1 FHIR Std.
MedicationStatement.​medication[x] Base example SNOMED CT Medication Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error MedicationStatement.dosage The reason for use (asNeededFor) must be populated identically across all Dosage elements of a resource. Multiple reasons per element are allowed but must then match in every element. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error MedicationStatement.dosage A reason for use (asNeededFor) may only be given for an as-needed dosage (asNeededBoolean = true). extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededForRequiresAsNeededWarning warning MedicationStatement.dosage A reason for use (asNeededFor) should only be given together with asNeededBoolean = true. extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededIdentical error MedicationStatement.dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error MedicationStatement.dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error MedicationStatement.dosage Dose values in doseQuantity or doseRange must be whole numbers or use one of the following fractional parts: .25, .33, .5, .66 or .75. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) )
DosageDoseUnitSameCode error MedicationStatement.dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning MedicationStatement.dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error MedicationStatement.dosage Dose values in doseQuantity or doseRange must use plain decimal notation with at most two decimal places. Exponential notation (e.g. 50e-2 instead of 0.5) is not allowed. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) )
DosageDoseValuePositive error MedicationStatement.dosage doseQuantity.value and doseRange.high.value must be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageDoseValuePositiveWarning warning MedicationStatement.dosage doseQuantity.value and doseRange.high.value should be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageFourSlotPatternInText error MedicationStatement.dosage A bare four-slot dosing schema (Viererschema, e.g. 1-0-1-0 or 1-0-1-0 Stück) must not be given as free text in Dosage.text; it has to be represented structurally. text.exists() implies text.matches('^\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?(\\s*[-–]\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?){3}(\\s*[A-Za-zÄÖÜäöüß().]+)?\\s*$').not()
DosageFourSlotPatternInTextWarning warning MedicationStatement.dosage A four-slot dosing schema (Viererschema, e.g. 1-1-1-1) was detected in Dosage.text. Please check whether it can be represented structurally. text.exists() implies text.matches('.*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+.*').not()
DosageLimitsPositive error MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) must be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageLimitsPositiveWarning warning MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) should be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageRequiresGeneratedText error MedicationStatement.dosage Regardless of the kind of dosage (structured or free text), the GeneratedDosageInstructionsMeta and renderedDosageInstruction extensions must be present. %resource.extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' ).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() )
DosageStructuredOrFreeText error MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DoseRangeHighRequiredWhenLowPresent error MedicationStatement.dosage If a lower bound is given for doseRange, an upper bound must be given as well. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.exists()
DoseRangeLowAndHighSameUnit error MedicationStatement.dosage The lower and upper bound of a variable single dose must use the same unit of measure. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).low.system = doseAndRate.dose.ofType(Range).high.system and doseAndRate.dose.ofType(Range).low.code = doseAndRate.dose.ofType(Range).high.code and doseAndRate.dose.ofType(Range).low.unit = doseAndRate.dose.ofType(Range).high.unit )
DoseRangeNoVarPeriod warning MedicationStatement.dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()
FreeTextMatchesRenderedText error MedicationStatement.dosage If a dosage is given as pure free text (text present, timing and doseAndRate empty), the value in dosageInstruction.text must match the value in the renderedDosageInstruction extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationDispense).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationStatement).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).value = %resource.dosage.text ) )
FreeTextSingleDosageOnly error MedicationStatement.dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning MedicationStatement.dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseNotBelowDose error MedicationStatement.dosage maxDosePerPeriod.numerator.value must not be smaller than the single dose (doseQuantity.value or doseRange.high.value). maxDosePerPeriod.numerator.value.empty() or ( (doseAndRate.dose.ofType(Quantity).value.empty() or doseAndRate.dose.ofType(Quantity).value <= maxDosePerPeriod.numerator.value) and (doseAndRate.dose.ofType(Range).high.value.empty() or doseAndRate.dose.ofType(Range).high.value <= maxDosePerPeriod.numerator.value) )
MaxDoseOnlyPureAsNeeded error MedicationStatement.dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error MedicationStatement.dosage maxDosePerPeriod is only allowed with a reference period of 24 hours (24 h) or 1 day (1 d). Other periods (e.g. at most 3 every 6 h) are not allowed. maxDosePerPeriod.empty() or ( (maxDosePerPeriod.denominator.value = 24 and maxDosePerPeriod.denominator.code = 'h') or (maxDosePerPeriod.denominator.value = 1 and maxDosePerPeriod.denominator.code = 'd') )
MaxDoseSameUnitAsDose error MedicationStatement.dosage maxDosePerPeriod must use the same unit, code and system as doseQuantity. maxDosePerPeriod.empty() or ( ( doseAndRate.dose.ofType(Quantity).exists() and doseAndRate.dose.ofType(Quantity).system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Quantity).code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Quantity).unit = maxDosePerPeriod.numerator.unit ) or ( doseAndRate.dose.ofType(Range).exists() and ( doseAndRate.dose.ofType(Range).low.empty() or ( doseAndRate.dose.ofType(Range).low.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).low.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).low.unit = maxDosePerPeriod.numerator.unit ) ) and ( doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).high.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).high.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).high.unit = maxDosePerPeriod.numerator.unit ) ) ) )
MinimumIntervalOnlyPureAsNeeded error MedicationStatement.dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error MedicationStatement.dosage The display unit of the minimum interval (valueDuration.unit) must match the UCUM code (e.g. 'Stunde(n)' only with code='h'). modifierExtension.where( url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).all( ( code = 'min' implies (unit = 'Minute(n)' or unit = 'Minute' or unit = 'Minuten') ) and ( code = 'h' implies (unit = 'Stunde(n)' or unit = 'Stunde' or unit = 'Stunden') ) )
PatientInstructionIdentical error MedicationStatement.dosage If patientInstruction is used in a resource with multiple dosages, the field must be populated identically in all Dosage elements. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error MedicationStatement.dosage AsNeededFor can only be set if AsNeeded is empty or true extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').empty() or asNeeded.empty() or asNeeded
dom-2 error MedicationStatement If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error MedicationStatement If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice MedicationStatement A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Differential View

This structure is derived from MedicationStatement

NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.dosage 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext

doco Documentation for this format

Constraints

Id Grade Path(s) Description Expression
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
MedicationStatement C 0..* MedicationStatement This is an abstract profile.
Record of medication being taken by a patient
Constraints: ExtRequiresDosage-MS
MedicationStatement.id This element is included in summaries. 0..1 id Logical id of this artifact
MedicationStatement.meta This element is included in summaries. 0..1 Meta Metadata about the resource
MedicationStatement.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
MedicationStatement.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
MedicationStatement.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
MedicationStatement.contained 0..* Resource Contained, inline Resources
MedicationStatement.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction This element must be supported. 0..1 (Complex) Dosierungsanweisung
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction
Constraints: ext-1
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.id 0..1 string Unique id for inter-element referencing
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.extension 0..0 Extension
Slice: Unordered, Open by value:url
Constraints: ext-1

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction"
MedicationStatement.Slices for extension.extension:renderedDosageInstruction.value[x] 0..1 markdown Hinweis: In der ersten Ausbaustufe des dgMP ist nur einfacher Text (String) zulässig; Markdown wird nicht unterstützt.
MedicationStatement.Slices for extension.extension:generatedDosageInstructionsMeta This element must be supported. 0..1 (Complex) Metadaten zu den generierten Dosierungsanweisungen
URL: http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta
MedicationStatement.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
MedicationStatement.identifier This element is included in summaries. 0..* Identifier External identifier
MedicationStatement.basedOn This element is included in summaries. 0..* Reference(MedicationRequest | CarePlan | ServiceRequest) Fulfils plan, proposal or order
MedicationStatement.partOf This element is included in summaries. 0..* Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Observation) Part of referenced event
MedicationStatement.status This element is a modifier element. This element is included in summaries. 1..1 code active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
Binding: Medication Status Codes (required): A coded concept indicating the current status of a MedicationStatement.
MedicationStatement.statusReason 0..* CodeableConcept Reason for current status
Binding: SNOMEDCTDrugTherapyStatusCodes (example): A coded concept indicating the reason for the status of the statement.
MedicationStatement.category This element is included in summaries. 0..1 CodeableConcept Type of medication usage
Binding: Medication usage category codes (preferred): A coded concept identifying where the medication included in the MedicationStatement is expected to be consumed or administered.
MedicationStatement.medication[x] This element is included in summaries. 1..1 What medication was taken
Binding: SNOMEDCTMedicationCodes (example): A coded concept identifying the substance or product being taken.
MedicationStatement.medication[x].medicationCodeableConcept CodeableConcept
MedicationStatement.medication[x].medicationReference Reference(Medication)
MedicationStatement.subject This element is included in summaries. 1..1 Reference(Patient | Group) Who is/was taking the medication
MedicationStatement.context This element is included in summaries. 0..1 Reference(Encounter | EpisodeOfCare) Encounter / Episode associated with MedicationStatement
MedicationStatement.effective[x] This element is included in summaries. 0..1 The date/time or interval when the medication is/was/will be taken
MedicationStatement.effective[x].effectiveDateTime dateTime
MedicationStatement.effective[x].effectivePeriod Period
MedicationStatement.dateAsserted This element is included in summaries. 0..1 dateTime When the statement was asserted?
MedicationStatement.informationSource 0..1 Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Organization) Person or organization that provided the information about the taking of this medication
MedicationStatement.derivedFrom 0..* Reference(Resource) Additional supporting information
MedicationStatement.reasonCode 0..* CodeableConcept Reason for why the medication is being/was taken
Binding: Condition/Problem/DiagnosisCodes (example): A coded concept identifying why the medication is being taken.
MedicationStatement.reasonReference 0..* Reference(Condition | Observation | DiagnosticReport) Condition or observation that supports why the medication is being/was taken
MedicationStatement.note 0..* Annotation Further information about the statement
MedicationStatement.dosage C 0..* DosageDgMP Angabe der Dosierinformationen strukturiert oder als Freitext
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageLimitsPositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, AsNeededForRequiresAsNeededWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageLimitsPositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDoseNotBelowDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
MedicationStatement.​language Base preferred Common Languages 📍4.0.1 FHIR Std.
MedicationStatement.​status Base required Medication status codes 📍4.0.1 FHIR Std.
MedicationStatement.​statusReason Base example SNOMED CT Drug Therapy Status codes 📍4.0.1 FHIR Std.
MedicationStatement.​category Base preferred Medication usage category codes 📍4.0.1 FHIR Std.
MedicationStatement.​medication[x] Base example SNOMED CT Medication Codes 📍4.0.1 FHIR Std.
MedicationStatement.​reasonCode Base example Condition/Problem/Diagnosis Codes 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error MedicationStatement.dosage The reason for use (asNeededFor) must be populated identically across all Dosage elements of a resource. Multiple reasons per element are allowed but must then match in every element. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error MedicationStatement.dosage A reason for use (asNeededFor) may only be given for an as-needed dosage (asNeededBoolean = true). extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededForRequiresAsNeededWarning warning MedicationStatement.dosage A reason for use (asNeededFor) should only be given together with asNeededBoolean = true. extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() implies asNeeded.ofType(boolean) = true
AsNeededIdentical error MedicationStatement.dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error MedicationStatement.dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error MedicationStatement.dosage Dose values in doseQuantity or doseRange must be whole numbers or use one of the following fractional parts: .25, .33, .5, .66 or .75. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.all( ($this mod 1 = 0) or ($this mod 1 = 0.25) or ($this mod 1 = 0.33) or ($this mod 1 = 0.5) or ($this mod 1 = 0.66) or ($this mod 1 = 0.75) ) ) )
DosageDoseUnitSameCode error MedicationStatement.dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning MedicationStatement.dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error MedicationStatement.dosage Dose values in doseQuantity or doseRange must use plain decimal notation with at most two decimal places. Exponential notation (e.g. 50e-2 instead of 0.5) is not allowed. doseAndRate.all( ( dose.ofType(Quantity).value.empty() or dose.ofType(Quantity).value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).low.value.empty() or dose.ofType(Range).low.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) and ( dose.ofType(Range).high.value.empty() or dose.ofType(Range).high.value.toString().matches('^[0-9]+([.][0-9]{1,2})?$') ) )
DosageDoseValuePositive error MedicationStatement.dosage doseQuantity.value and doseRange.high.value must be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageDoseValuePositiveWarning warning MedicationStatement.dosage doseQuantity.value and doseRange.high.value should be greater than 0. The value 0 is additionally allowed for doseRange.low.value only. doseAndRate.all( dose.ofType(Quantity).value.all($this > 0) and dose.ofType(Range).low.value.all($this >= 0) and dose.ofType(Range).high.value.all($this > 0) )
DosageFourSlotPatternInText error MedicationStatement.dosage A bare four-slot dosing schema (Viererschema, e.g. 1-0-1-0 or 1-0-1-0 Stück) must not be given as free text in Dosage.text; it has to be represented structurally. text.exists() implies text.matches('^\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?(\\s*[-–]\\s*\\d+([.,]\\d+)?(\\s*/\\s*\\d+)?){3}(\\s*[A-Za-zÄÖÜäöüß().]+)?\\s*$').not()
DosageFourSlotPatternInTextWarning warning MedicationStatement.dosage A four-slot dosing schema (Viererschema, e.g. 1-1-1-1) was detected in Dosage.text. Please check whether it can be represented structurally. text.exists() implies text.matches('.*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+\\s*[-–]\\s*\\d+.*').not()
DosageLimitsPositive error MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) must be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageLimitsPositiveWarning warning MedicationStatement.dosage The minimum interval between administrations (valueDuration.value) and maxDosePerPeriod (numerator.value, denominator.value) should be greater than 0. modifierExtension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).value.all($this > 0) and maxDosePerPeriod.numerator.value.all($this > 0) and maxDosePerPeriod.denominator.value.all($this > 0)
DosageRequiresGeneratedText error MedicationStatement.dosage Regardless of the kind of dosage (structured or free text), the GeneratedDosageInstructionsMeta and renderedDosageInstruction extensions must be present. %resource.extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' ).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).exists() or %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() )
DosageStructuredOrFreeText error MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning MedicationStatement.dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning MedicationStatement.dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DoseRangeHighRequiredWhenLowPresent error MedicationStatement.dosage If a lower bound is given for doseRange, an upper bound must be given as well. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.exists()
DoseRangeLowAndHighSameUnit error MedicationStatement.dosage The lower and upper bound of a variable single dose must use the same unit of measure. doseAndRate.dose.ofType(Range).low.empty() or doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).low.system = doseAndRate.dose.ofType(Range).high.system and doseAndRate.dose.ofType(Range).low.code = doseAndRate.dose.ofType(Range).high.code and doseAndRate.dose.ofType(Range).low.unit = doseAndRate.dose.ofType(Range).high.unit )
DoseRangeNoVarPeriod warning MedicationStatement.dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
ExtRequiresDosage-MS error MedicationStatement If a dosage extension (GeneratedDosageInstructionsMeta or renderedDosageInstruction) is present, at least one dosage must be present. ( extension.where( url = 'http://ig.fhir.de/igs/medication/StructureDefinition/GeneratedDosageInstructionsMeta' or url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).exists() ) implies dosage.exists()
FreeTextMatchesRenderedText error MedicationStatement.dosage If a dosage is given as pure free text (text present, timing and doseAndRate empty), the value in dosageInstruction.text must match the value in the renderedDosageInstruction extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationDispense).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationDispense.renderedDosageInstruction' ).value = %resource.dosageInstruction.text ) or ( %resource.ofType(MedicationStatement).exists() and %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationStatement.renderedDosageInstruction' ).value = %resource.dosage.text ) )
FreeTextSingleDosageOnly error MedicationStatement.dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning MedicationStatement.dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseNotBelowDose error MedicationStatement.dosage maxDosePerPeriod.numerator.value must not be smaller than the single dose (doseQuantity.value or doseRange.high.value). maxDosePerPeriod.numerator.value.empty() or ( (doseAndRate.dose.ofType(Quantity).value.empty() or doseAndRate.dose.ofType(Quantity).value <= maxDosePerPeriod.numerator.value) and (doseAndRate.dose.ofType(Range).high.value.empty() or doseAndRate.dose.ofType(Range).high.value <= maxDosePerPeriod.numerator.value) )
MaxDoseOnlyPureAsNeeded error MedicationStatement.dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error MedicationStatement.dosage maxDosePerPeriod is only allowed with a reference period of 24 hours (24 h) or 1 day (1 d). Other periods (e.g. at most 3 every 6 h) are not allowed. maxDosePerPeriod.empty() or ( (maxDosePerPeriod.denominator.value = 24 and maxDosePerPeriod.denominator.code = 'h') or (maxDosePerPeriod.denominator.value = 1 and maxDosePerPeriod.denominator.code = 'd') )
MaxDoseSameUnitAsDose error MedicationStatement.dosage maxDosePerPeriod must use the same unit, code and system as doseQuantity. maxDosePerPeriod.empty() or ( ( doseAndRate.dose.ofType(Quantity).exists() and doseAndRate.dose.ofType(Quantity).system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Quantity).code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Quantity).unit = maxDosePerPeriod.numerator.unit ) or ( doseAndRate.dose.ofType(Range).exists() and ( doseAndRate.dose.ofType(Range).low.empty() or ( doseAndRate.dose.ofType(Range).low.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).low.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).low.unit = maxDosePerPeriod.numerator.unit ) ) and ( doseAndRate.dose.ofType(Range).high.empty() or ( doseAndRate.dose.ofType(Range).high.system = maxDosePerPeriod.numerator.system and doseAndRate.dose.ofType(Range).high.code = maxDosePerPeriod.numerator.code and doseAndRate.dose.ofType(Range).high.unit = maxDosePerPeriod.numerator.unit ) ) ) )
MinimumIntervalOnlyPureAsNeeded error MedicationStatement.dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error MedicationStatement.dosage The display unit of the minimum interval (valueDuration.unit) must match the UCUM code (e.g. 'Stunde(n)' only with code='h'). modifierExtension.where( url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations' ).value.ofType(Duration).all( ( code = 'min' implies (unit = 'Minute(n)' or unit = 'Minute' or unit = 'Minuten') ) and ( code = 'h' implies (unit = 'Stunde(n)' or unit = 'Stunde' or unit = 'Stunden') ) )
PatientInstructionIdentical error MedicationStatement.dosage If patientInstruction is used in a resource with multiple dosages, the field must be populated identically in all Dosage elements. ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error MedicationStatement.dosage AsNeededFor can only be set if AsNeeded is empty or true extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').empty() or asNeeded.empty() or asNeeded
dom-2 error MedicationStatement If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error MedicationStatement If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error MedicationStatement If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice MedicationStatement A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from MedicationStatement

 

Other representations of profile: CSV, Excel, Schematron