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

Data Type Profile: Dosage dgMP

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

Gibt an, wie das Medikament vom Patienten im Kontext dgMP eingenommen wird/wurde oder eingenommen werden soll.

Verwendung

Dieses Profil beschreibt eine technisch streng validierte Ausprägung der FHIR-Ressource Dosage für den deutschen Kontext und ist speziell für den Einsatz im dgMP-Prozess entwickelt worden. Das Profil enthält gezielte Einschränkungen und Vorgaben, um die technische Überprüfbarkeit und Konsistenz von Dosierungsangaben sicherzustellen.

Hinweis für Entwickler: Verwenden Sie dieses Profil immer dann, wenn Dosierungsinformationen im Rahmen des dgMP-Prozesses erstellt oder verarbeitet werden. Insbesondere bei zentralen Diensten innerhalb der Telematikinfrastruktur (z.B. E-Rezept-Fachdienst) ist die Einhaltung dieses Profils erforderlich, da hier eine technische Validierung der Dosierung erfolgt. Beachten Sie, dass dieses Profil bewusst Einschränkungen in der Interoperabilität zugunsten der Validierbarkeit in Kauf nimmt.

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
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
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
Dosage.Slices for extension Content/Rules for all slices
Dosage.Slices for extension.extension:asNeededFor This element must be supported. 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
Dosage.Slices for extension.extension:asNeededFor.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
Dosage.Slices for extension.extension:asNeededFor.value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
Dosage.Slices for extension.extension:asNeededFor.value[x].text This element must be supported. This element is included in summaries. 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension This element is a modifier element. This element is included in summaries. 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
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations This element is a modifier element. This element must be supported. This element is included in summaries. 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x] This element must be supported. 1..1 Duration Mindestabstand zwischen zwei Gaben
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.text This element must be supported. This element is included in summaries. 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
Dosage.patientInstruction This element must be supported. This element is included in summaries. 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing This element must be supported. This element is included in summaries. C 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Constraints: TimingOnlyOnePeriodForDayOfWeek
Dosage.asNeeded[x] This element must be supported. This element is included in summaries. 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.doseAndRate This element must be supported. This element is included in summaries. 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.Slices for dose[x] This element must be supported. This element is included in summaries. 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Dosage.doseAndRate.Slices for dose[x].doseRange Range
Dosage.doseAndRate.Slices for dose[x].doseQuantity Quantity(SimpleQuantity)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity This element must be supported. This element is included in summaries. 0..1 SimpleQuantity The snapshot does not say whether the constraints on the root of this type profile have been applied to this element, so assume they have not. Check the type profile directly as well Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange This element must be supported. This element is included in summaries. 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.maxDosePerPeriod This element must be supported. This element is included in summaries. 0..1 Ratio Maximale Dosis pro Zeitraum

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Dosage.extension:asNeededFor.​value[x] Base example SNOMED CT Medication As Needed Reason Codes 📦4.0.1 FHIR Std.
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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 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 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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 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 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 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 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )
TimingOnlyOnePeriodForDayOfWeek error Dosage.timing In a schema that combines dayOfWeek with either timeOfDay or when, each combination of weekday and time must be unique across all Dosage elements of a resource. ( /* Detect DayOfWeek and Time/4-Schema */ %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all( ( timing.repeat.dayOfWeek.exists() and ( (timing.repeat.timeOfDay.exists() and timing.repeat.when.empty()) or (timing.repeat.when.exists() and timing.repeat.timeOfDay.empty()) ) ) implies ( ( (%resource.ofType(MedicationRequest).exists() or %resource.ofType(MedicationDispense).exists()) implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) and ( %resource.ofType(MedicationStatement).exists() implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) ) )
dos-1 error 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
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()
sqty-1 error Dosage.doseAndRate.dose[x]:doseRange.low, Dosage.doseAndRate.dose[x]:doseRange.high The comparator is not used on a SimpleQuantity comparator.empty()

This structure is derived from DosageDE

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: 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
Dosage.Slices for extension Content/Rules for all slices
Dosage.Slices for extension.extension:asNeededFor 0..* R5 Dosage.asNeededFor Dosage asNeededFor
Dosage.Slices for extension.extension:asNeededFor.value[x]
Dosage.Slices for extension.extension:asNeededFor.value[x].coding 0..0 Code defined by a terminology system
Dosage.Slices for extension.extension:asNeededFor.value[x].text 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension Content/Rules for all slices
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations 0..1 MinimumIntervalBetweenAdministrationsEx Minimum Interval Between Administrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x]
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.sequence 0..0 The order of the dosage instructions
Dosage.patientInstruction 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Dosage.asNeeded[x] 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.site 0..0 Body site to administer to
Dosage.route 0..0 How drug should enter body
Dosage.method 0..0 Technique for administering medication
Dosage.doseAndRate 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.type 0..0 The kind of dose or rate specified
Dosage.doseAndRate.Slices for dose[x] Content/Rules for all slices
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code 1..1 code Coded form of the unit
Dosage.doseAndRate.rate[x] 0..0 Amount of medication per unit of time
Dosage.maxDosePerPeriod
Dosage.maxDosePerPeriod.numerator
Dosage.maxDosePerPeriod.numerator.comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.maxDosePerPeriod.denominator
Dosage.maxDosePerPeriod.denominator.comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.maxDosePerAdministration 0..0 Upper limit on medication per administration
Dosage.maxDosePerLifetime 0..0 Upper limit on medication per lifetime of the patient

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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
AsNeededIdentical error Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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) )
DosageFourSlotPatternInText error 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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()
DosageLimitsPositive error 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)
DosageRequiresGeneratedText error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )
NameFlagsCard.TypeDescription & Constraints    Filter: doco
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
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
Dosage.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor This element must be supported. 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
Dosage.Slices for extension.extension:asNeededFor.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension.extension:asNeededFor.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
Dosage.Slices for extension.extension:asNeededFor.value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
Dosage.Slices for extension.extension:asNeededFor.value[x].id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension.extension:asNeededFor.value[x].extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.value[x].text This element must be supported. This element is included in summaries. 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension This element is a modifier element. This element is included in summaries. 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
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations This element is a modifier element. This element must be supported. This element is included in summaries. 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x] This element must be supported. 1..1 Duration Mindestabstand zwischen zwei Gaben
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].id 0..1 string Unique id for inter-element referencing
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.text This element must be supported. This element is included in summaries. 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
Dosage.patientInstruction This element must be supported. This element is included in summaries. 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing This element must be supported. This element is included in summaries. C 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Constraints: TimingOnlyOnePeriodForDayOfWeek
Dosage.asNeeded[x] This element must be supported. This element is included in summaries. 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.doseAndRate This element must be supported. This element is included in summaries. 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x] This element must be supported. This element is included in summaries. 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Dosage.doseAndRate.Slices for dose[x].doseRange Range
Dosage.doseAndRate.Slices for dose[x].doseQuantity Quantity(SimpleQuantity)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity This element must be supported. This element is included in summaries. 0..1 SimpleQuantity The snapshot does not say whether the constraints on the root of this type profile have been applied to this element, so assume they have not. Check the type profile directly as well Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange This element must be supported. This element is included in summaries. 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.maxDosePerPeriod This element must be supported. This element is included in summaries. 0..1 Ratio Maximale Dosis pro Zeitraum
Dosage.maxDosePerPeriod.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.numerator This element is included in summaries. 0..1 Quantity Numerator value
Dosage.maxDosePerPeriod.numerator.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.numerator.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.numerator.value This element is included in summaries. 0..1 decimal Numerical value (with implicit precision)
Dosage.maxDosePerPeriod.numerator.unit This element is included in summaries. 0..1 string Unit representation
Dosage.maxDosePerPeriod.numerator.system This element is included in summaries. C 0..1 uri System that defines coded unit form
Dosage.maxDosePerPeriod.numerator.code This element is included in summaries. 0..1 code Coded form of the unit
Dosage.maxDosePerPeriod.denominator This element is included in summaries. 0..1 Quantity Denominator value
Dosage.maxDosePerPeriod.denominator.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.denominator.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.denominator.value This element is included in summaries. 0..1 decimal Numerical value (with implicit precision)
Dosage.maxDosePerPeriod.denominator.unit This element is included in summaries. 0..1 string Unit representation
Dosage.maxDosePerPeriod.denominator.system This element is included in summaries. C 0..1 uri System that defines coded unit form
Dosage.maxDosePerPeriod.denominator.code This element is included in summaries. 0..1 code Coded form of the unit

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Dosage.extension:asNeededFor.​value[x] Base example SNOMED CT Medication As Needed Reason Codes 📦4.0.1 FHIR Std.
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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 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 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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 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 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 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 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )
TimingOnlyOnePeriodForDayOfWeek error Dosage.timing In a schema that combines dayOfWeek with either timeOfDay or when, each combination of weekday and time must be unique across all Dosage elements of a resource. ( /* Detect DayOfWeek and Time/4-Schema */ %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all( ( timing.repeat.dayOfWeek.exists() and ( (timing.repeat.timeOfDay.exists() and timing.repeat.when.empty()) or (timing.repeat.when.exists() and timing.repeat.timeOfDay.empty()) ) ) implies ( ( (%resource.ofType(MedicationRequest).exists() or %resource.ofType(MedicationDispense).exists()) implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) and ( %resource.ofType(MedicationStatement).exists() implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) ) )
dos-1 error 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
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()
sqty-1 error Dosage.doseAndRate.dose[x]:doseRange.low, Dosage.doseAndRate.dose[x]:doseRange.high The comparator is not used on a SimpleQuantity comparator.empty()

This structure is derived from DosageDE

Summary

Mandatory: 0 element(17 nested mandatory elements)
Must-Support: 1 element
Fixed: 1 element
Prohibited: 13 elements

Structures

This structure refers to these other structures:

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
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
Dosage.Slices for extension Content/Rules for all slices
Dosage.Slices for extension.extension:asNeededFor This element must be supported. 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
Dosage.Slices for extension.extension:asNeededFor.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
Dosage.Slices for extension.extension:asNeededFor.value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
Dosage.Slices for extension.extension:asNeededFor.value[x].text This element must be supported. This element is included in summaries. 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension This element is a modifier element. This element is included in summaries. 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
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations This element is a modifier element. This element must be supported. This element is included in summaries. 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x] This element must be supported. 1..1 Duration Mindestabstand zwischen zwei Gaben
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.text This element must be supported. This element is included in summaries. 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
Dosage.patientInstruction This element must be supported. This element is included in summaries. 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing This element must be supported. This element is included in summaries. C 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Constraints: TimingOnlyOnePeriodForDayOfWeek
Dosage.asNeeded[x] This element must be supported. This element is included in summaries. 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.doseAndRate This element must be supported. This element is included in summaries. 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.Slices for dose[x] This element must be supported. This element is included in summaries. 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Dosage.doseAndRate.Slices for dose[x].doseRange Range
Dosage.doseAndRate.Slices for dose[x].doseQuantity Quantity(SimpleQuantity)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity This element must be supported. This element is included in summaries. 0..1 SimpleQuantity The snapshot does not say whether the constraints on the root of this type profile have been applied to this element, so assume they have not. Check the type profile directly as well Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange This element must be supported. This element is included in summaries. 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.maxDosePerPeriod This element must be supported. This element is included in summaries. 0..1 Ratio Maximale Dosis pro Zeitraum

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Dosage.extension:asNeededFor.​value[x] Base example SNOMED CT Medication As Needed Reason Codes 📦4.0.1 FHIR Std.
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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 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 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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 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 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 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 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )
TimingOnlyOnePeriodForDayOfWeek error Dosage.timing In a schema that combines dayOfWeek with either timeOfDay or when, each combination of weekday and time must be unique across all Dosage elements of a resource. ( /* Detect DayOfWeek and Time/4-Schema */ %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all( ( timing.repeat.dayOfWeek.exists() and ( (timing.repeat.timeOfDay.exists() and timing.repeat.when.empty()) or (timing.repeat.when.exists() and timing.repeat.timeOfDay.empty()) ) ) implies ( ( (%resource.ofType(MedicationRequest).exists() or %resource.ofType(MedicationDispense).exists()) implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) and ( %resource.ofType(MedicationStatement).exists() implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) ) )
dos-1 error 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
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()
sqty-1 error Dosage.doseAndRate.dose[x]:doseRange.low, Dosage.doseAndRate.dose[x]:doseRange.high The comparator is not used on a SimpleQuantity comparator.empty()

Differential View

This structure is derived from DosageDE

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: 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
Dosage.Slices for extension Content/Rules for all slices
Dosage.Slices for extension.extension:asNeededFor 0..* R5 Dosage.asNeededFor Dosage asNeededFor
Dosage.Slices for extension.extension:asNeededFor.value[x]
Dosage.Slices for extension.extension:asNeededFor.value[x].coding 0..0 Code defined by a terminology system
Dosage.Slices for extension.extension:asNeededFor.value[x].text 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension Content/Rules for all slices
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations 0..1 MinimumIntervalBetweenAdministrationsEx Minimum Interval Between Administrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x]
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.sequence 0..0 The order of the dosage instructions
Dosage.additionalInstruction 0..0 Supplemental instruction or warnings to the patient - e.g. "with meals", "may cause drowsiness"
Dosage.patientInstruction 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Dosage.asNeeded[x] 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.site 0..0 Body site to administer to
Dosage.route 0..0 How drug should enter body
Dosage.method 0..0 Technique for administering medication
Dosage.doseAndRate 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.type 0..0 The kind of dose or rate specified
Dosage.doseAndRate.Slices for dose[x] Content/Rules for all slices
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code 1..1 code Coded form of the unit
Dosage.doseAndRate.rate[x] 0..0 Amount of medication per unit of time
Dosage.maxDosePerPeriod
Dosage.maxDosePerPeriod.numerator
Dosage.maxDosePerPeriod.numerator.comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.maxDosePerPeriod.denominator
Dosage.maxDosePerPeriod.denominator.comparator 0..0 < | <= | >= | > - how to understand the value
Dosage.maxDosePerAdministration 0..0 Upper limit on medication per administration
Dosage.maxDosePerLifetime 0..0 Upper limit on medication per lifetime of the patient

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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
AsNeededIdentical error Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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) )
DosageFourSlotPatternInText error 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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()
DosageLimitsPositive error 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)
DosageRequiresGeneratedText error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Dosage C 0..* DosageDE How the medication is/was taken or should be taken
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
Dosage.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor This element must be supported. 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
Dosage.Slices for extension.extension:asNeededFor.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension.extension:asNeededFor.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
Dosage.Slices for extension.extension:asNeededFor.value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
Dosage.Slices for extension.extension:asNeededFor.value[x].id 0..1 string Unique id for inter-element referencing
Dosage.Slices for extension.extension:asNeededFor.value[x].extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for extension.extension:asNeededFor.value[x].text This element must be supported. This element is included in summaries. 1..1 string Plain text representation of the concept
Dosage.Slices for modifierExtension This element is a modifier element. This element is included in summaries. 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
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations This element is a modifier element. This element must be supported. This element is included in summaries. 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.id 0..1 string Unique id for inter-element referencing
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.extension 0..0 Extension
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x] This element must be supported. 1..1 Duration Mindestabstand zwischen zwei Gaben
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].id 0..1 string Unique id for inter-element referencing
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org (no extensions allowed)
Dosage.Slices for modifierExtension.modifierExtension:minimumIntervalBetweenAdministrations.value[x].code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
Dosage.text This element must be supported. This element is included in summaries. 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
Dosage.patientInstruction This element must be supported. This element is included in summaries. 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
Dosage.timing This element must be supported. This element is included in summaries. C 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
Constraints: TimingOnlyOnePeriodForDayOfWeek
Dosage.asNeeded[x] This element must be supported. This element is included in summaries. 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
Dosage.doseAndRate This element must be supported. This element is included in summaries. 0..1 Element Menge des verabreichten Medikaments
Dosage.doseAndRate.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x] This element must be supported. This element is included in summaries. 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Dosage.doseAndRate.Slices for dose[x].doseRange Range
Dosage.doseAndRate.Slices for dose[x].doseQuantity Quantity(SimpleQuantity)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity This element must be supported. This element is included in summaries. 0..1 SimpleQuantity The snapshot does not say whether the constraints on the root of this type profile have been applied to this element, so assume they have not. Check the type profile directly as well Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseQuantity.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange This element must be supported. This element is included in summaries. 0..1 Range Amount of medication per dose
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.low.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high This element must be supported. This element is included in summaries. C 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
Constraints: sqty-1
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.id 0..1 string Unique id for inter-element referencing
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.value This element must be supported. This element is included in summaries. 1..1 decimal Numerical value (with implicit precision)
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.unit This element must be supported. This element is included in summaries. 1..1 string Unit representation
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.system This element must be supported. This element is included in summaries. C 1..1 uri System that defines coded unit form
Dosage.doseAndRate.Slices for dose[x].dose[x]:doseRange.high.code This element must be supported. This element is included in summaries. 1..1 code Coded form of the unit
Dosage.maxDosePerPeriod This element must be supported. This element is included in summaries. 0..1 Ratio Maximale Dosis pro Zeitraum
Dosage.maxDosePerPeriod.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.numerator This element is included in summaries. 0..1 Quantity Numerator value
Dosage.maxDosePerPeriod.numerator.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.numerator.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.numerator.value This element is included in summaries. 0..1 decimal Numerical value (with implicit precision)
Dosage.maxDosePerPeriod.numerator.unit This element is included in summaries. 0..1 string Unit representation
Dosage.maxDosePerPeriod.numerator.system This element is included in summaries. C 0..1 uri System that defines coded unit form
Dosage.maxDosePerPeriod.numerator.code This element is included in summaries. 0..1 code Coded form of the unit
Dosage.maxDosePerPeriod.denominator This element is included in summaries. 0..1 Quantity Denominator value
Dosage.maxDosePerPeriod.denominator.id 0..1 string Unique id for inter-element referencing
Dosage.maxDosePerPeriod.denominator.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Dosage.maxDosePerPeriod.denominator.value This element is included in summaries. 0..1 decimal Numerical value (with implicit precision)
Dosage.maxDosePerPeriod.denominator.unit This element is included in summaries. 0..1 string Unit representation
Dosage.maxDosePerPeriod.denominator.system This element is included in summaries. C 0..1 uri System that defines coded unit form
Dosage.maxDosePerPeriod.denominator.code This element is included in summaries. 0..1 code Coded form of the unit

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Dosage.extension:asNeededFor.​value[x] Base example SNOMED CT Medication As Needed Reason Codes 📦4.0.1 FHIR Std.
Dosage.modifierExtension:minimumIntervalBetweenAdministrations.​value[x].code Base required Mindestabstand UnitsOfTime dgMP ValueSet 📦2.0.0-ballot This IG
Dosage.doseAndRate.dose[x]:doseQuantity Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​low Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown
Dosage.doseAndRate.dose[x]:doseRange.​high Base required https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT Not State Unknown

Constraints

Id Grade Path(s) Description Expression
AsNeededForIdentical error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage The as-needed flag (asNeededBoolean) must be populated identically across all Dosage elements of a resource. ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1
DosageDoseQuantityAllowedFractions error 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 Dosage The dose unit must be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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 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 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 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. A schema embedded in further text, including the generated form 'täglich: 1-0-1-0 Stück', only triggers the warning DosageFourSlotPatternInTextWarning. 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 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 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 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 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage)).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 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 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 Dosage A variable single dose and a variable period should not be used together. doseAndRate.dose.ofType(Range).empty() or timing.repeat.periodMax.empty()
FreeTextMatchesRenderedText error 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%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 Dosage If a dosage is given as pure free text, there must be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).count() = 1 )
MaxDoseNotBelowDose error 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 Dosage A maximum amount (maxDosePerPeriod) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines how much is applied within the reference period. A free-text dosage is rendered verbatim, so a maximum amount next to it could never appear in the text. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MaxDosePerPeriodOnly24hOr1d error 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 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 Dosage A minimum interval between two single administrations (Mindestabstand) may only be given for a structured pure as-needed dosage: asNeededBoolean = true, doseAndRate present and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. A free-text dosage is rendered verbatim, so a minimum interval next to it could never appear in the text. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty() and doseAndRate.exists())
MinimumIntervalUnitMatchesCode error 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 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.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all(patientInstruction.exists()) ) )
TimingOnlyOnePeriodForDayOfWeek error Dosage.timing In a schema that combines dayOfWeek with either timeOfDay or when, each combination of weekday and time must be unique across all Dosage elements of a resource. ( /* Detect DayOfWeek and Time/4-Schema */ %resource.ofType(MedicationRequest).dosageInstruction.combine(%resource.ofType(MedicationDispense).dosageInstruction).combine(%resource.ofType(MedicationStatement).dosage) ).all( ( timing.repeat.dayOfWeek.exists() and ( (timing.repeat.timeOfDay.exists() and timing.repeat.when.empty()) or (timing.repeat.when.exists() and timing.repeat.timeOfDay.empty()) ) ) implies ( ( (%resource.ofType(MedicationRequest).exists() or %resource.ofType(MedicationDispense).exists()) implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosageInstruction.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosageInstruction.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) and ( %resource.ofType(MedicationStatement).exists() implies ( /* For each day of week */ /* if Mon occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'mon').count() > 1) implies ( (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('mon' in dayOfWeek).timeOfDay.count()) )) and /* if tue occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'tue').count() > 1) implies ( (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('tue' in dayOfWeek).timeOfDay.count()) )) and /* if wed occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'wed').count() > 1) implies ( (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('wed' in dayOfWeek).timeOfDay.count()) )) and /* if thu occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'thu').count() > 1) implies ( (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('thu' in dayOfWeek).timeOfDay.count()) )) and /* if fri occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'fri').count() > 1) implies ( (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('fri' in dayOfWeek).timeOfDay.count()) )) and /* if sat occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sat').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sat' in dayOfWeek).timeOfDay.count()) )) and /* if sun occurs multiple times */ ((%resource.dosage.timing.repeat.dayOfWeek.where($this = 'sun').count() > 1) implies ( (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).when.count()) and (%resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.distinct().count() = %resource.dosage.timing.repeat.where('sun' in dayOfWeek).timeOfDay.count()) )) ) ) ) )
dos-1 error 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
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()
sqty-1 error Dosage.doseAndRate.dose[x]:doseRange.low, Dosage.doseAndRate.dose[x]:doseRange.high The comparator is not used on a SimpleQuantity comparator.empty()

This structure is derived from DosageDE

Summary

Mandatory: 0 element(17 nested mandatory elements)
Must-Support: 1 element
Fixed: 1 element
Prohibited: 13 elements

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron