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-08-30 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: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... Slices for extension Content/Rules for all slices
.... extension:asNeededFor S 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
..... value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
...... text SΣ 1..1 string Plain text representation of the concept
... Slices for modifierExtension ?!Σ 0..* Extension Extension
Slice: Unordered, Open by value:url
.... modifierExtension:minimumIntervalBetweenAdministrations ?!SΣ 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
..... value[x] S 1..1 Duration Mindestabstand zwischen zwei Gaben
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code SΣ 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... text SΣ 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
... timing SΣ 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] SΣ 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... doseAndRate SΣ 0..1 Element Menge des verabreichten Medikaments
.... Slices for dose[x] SΣ 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
..... doseRange Range
..... doseQuantity Quantity(SimpleQuantity)
..... dose[x]:doseQuantity SΣ 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
...... code SΣ 1..1 code Coded form of the unit
..... dose[x]:doseRange SΣ 0..1 Range Amount of medication per dose
...... low SΣ 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
...... high SΣ 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
... maxDosePerPeriod SΣ 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning Dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning Dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error 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()

This structure is derived from DosageDE

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... Slices for extension Content/Rules for all slices
.... extension:asNeededFor 0..* R5 Dosage.asNeededFor Dosage asNeededFor
..... value[x]
...... coding 0..0 Code defined by a terminology system
...... text 1..1 string Plain text representation of the concept
... Slices for modifierExtension Content/Rules for all slices
.... modifierExtension:minimumIntervalBetweenAdministrations 0..1 MinimumIntervalBetweenAdministrationsEx Minimum Interval Between Administrations
..... value[x]
...... value S 1..1 decimal Numerical value (with implicit precision)
...... comparator 0..0 < | <= | >= | > - how to understand the value
...... unit 1..1 string Unit representation
...... system 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... sequence 0..0 The order of the dosage instructions
... patientInstruction 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
... timing 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... site 0..0 Body site to administer to
... route 0..0 How drug should enter body
... method 0..0 Technique for administering medication
... doseAndRate 0..1 Element Menge des verabreichten Medikaments
.... type 0..0 The kind of dose or rate specified
.... Slices for dose[x] Content/Rules for all slices
..... dose[x]:doseQuantity 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... value 1..1 decimal Numerical value (with implicit precision)
...... unit 1..1 string Unit representation
...... system 1..1 uri System that defines coded unit form
...... code 1..1 code Coded form of the unit
..... dose[x]:doseRange 0..1 Range Amount of medication per dose
...... low 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value 1..1 decimal Numerical value (with implicit precision)
....... unit 1..1 string Unit representation
....... system 1..1 uri System that defines coded unit form
....... code 1..1 code Coded form of the unit
...... high 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value 1..1 decimal Numerical value (with implicit precision)
....... unit 1..1 string Unit representation
....... system 1..1 uri System that defines coded unit form
....... code 1..1 code Coded form of the unit
.... rate[x] 0..0 Amount of medication per unit of time
... maxDosePerAdministration 0..0 Upper limit on medication per administration
... 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... id 0..1 string Unique id for inter-element referencing
... Slices for extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... extension:asNeededFor S 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
..... value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... text SΣ 1..1 string Plain text representation of the concept
... Slices for modifierExtension ?!Σ 0..* Extension Extension
Slice: Unordered, Open by value:url
.... modifierExtension:minimumIntervalBetweenAdministrations ?!SΣ 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
..... value[x] S 1..1 Duration Mindestabstand zwischen zwei Gaben
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code SΣ 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... patientInstruction SΣ 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
... timing SΣ 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] SΣ 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... doseAndRate SΣ 0..1 Element Menge des verabreichten Medikaments
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... Slices for dose[x] SΣ 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
..... doseRange Range
..... doseQuantity Quantity(SimpleQuantity)
..... dose[x]:doseQuantity SΣ 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
...... code SΣ 1..1 code Coded form of the unit
..... dose[x]:doseRange SΣ 0..1 Range Amount of medication per dose
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... low SΣ 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... id 0..1 string Unique id for inter-element referencing
....... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
...... high SΣ 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... id 0..1 string Unique id for inter-element referencing
....... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
... maxDosePerPeriod SΣ 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning Dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning Dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error 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()

This structure is derived from DosageDE

Summary

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

Structures

This structure refers to these other structures:

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... Slices for extension Content/Rules for all slices
.... extension:asNeededFor S 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
..... value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
...... text SΣ 1..1 string Plain text representation of the concept
... Slices for modifierExtension ?!Σ 0..* Extension Extension
Slice: Unordered, Open by value:url
.... modifierExtension:minimumIntervalBetweenAdministrations ?!SΣ 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
..... value[x] S 1..1 Duration Mindestabstand zwischen zwei Gaben
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code SΣ 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... text SΣ 0..1 string Freitext-Dosierungsanweisungen, z. B. 'Maximal 3x täglich 1 Stück bei Bedarf'
... timing SΣ 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] SΣ 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... doseAndRate SΣ 0..1 Element Menge des verabreichten Medikaments
.... Slices for dose[x] SΣ 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
..... doseRange Range
..... doseQuantity Quantity(SimpleQuantity)
..... dose[x]:doseQuantity SΣ 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
...... code SΣ 1..1 code Coded form of the unit
..... dose[x]:doseRange SΣ 0..1 Range Amount of medication per dose
...... low SΣ 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
...... high SΣ 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
... maxDosePerPeriod SΣ 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning Dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning Dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error 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()

Differential View

This structure is derived from DosageDE

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... Slices for extension Content/Rules for all slices
.... extension:asNeededFor 0..* R5 Dosage.asNeededFor Dosage asNeededFor
..... value[x]
...... coding 0..0 Code defined by a terminology system
...... text 1..1 string Plain text representation of the concept
... Slices for modifierExtension Content/Rules for all slices
.... modifierExtension:minimumIntervalBetweenAdministrations 0..1 MinimumIntervalBetweenAdministrationsEx Minimum Interval Between Administrations
..... value[x]
...... value S 1..1 decimal Numerical value (with implicit precision)
...... comparator 0..0 < | <= | >= | > - how to understand the value
...... unit 1..1 string Unit representation
...... system 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... sequence 0..0 The order of the dosage instructions
... patientInstruction 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
... timing 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... site 0..0 Body site to administer to
... route 0..0 How drug should enter body
... method 0..0 Technique for administering medication
... doseAndRate 0..1 Element Menge des verabreichten Medikaments
.... type 0..0 The kind of dose or rate specified
.... Slices for dose[x] Content/Rules for all slices
..... dose[x]:doseQuantity 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... value 1..1 decimal Numerical value (with implicit precision)
...... unit 1..1 string Unit representation
...... system 1..1 uri System that defines coded unit form
...... code 1..1 code Coded form of the unit
..... dose[x]:doseRange 0..1 Range Amount of medication per dose
...... low 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value 1..1 decimal Numerical value (with implicit precision)
....... unit 1..1 string Unit representation
....... system 1..1 uri System that defines coded unit form
....... code 1..1 code Coded form of the unit
...... high 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... value 1..1 decimal Numerical value (with implicit precision)
....... unit 1..1 string Unit representation
....... system 1..1 uri System that defines coded unit form
....... code 1..1 code Coded form of the unit
.... rate[x] 0..0 Amount of medication per unit of time
... maxDosePerAdministration 0..0 Upper limit on medication per administration
... 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Dosage C 0..* DosageDE How the medication is/was taken or should be taken
Constraints: DosageStructuredOrFreeTextWarning, DosageStructuredRequiresBothWarning, DosageDoseUnitSameCodeWarning, DosageDoseValuePositiveWarning, DosageFourSlotPatternInTextWarning, FreeTextSingleDosageOnlyWarning, dos-1, DosageStructuredOrFreeText, DosageStructuredRequiresBoth, DosageStructuredRequiresGeneratedText, FreeTextSingleDosageOnly, FreeTextMatchesRenderedText, DosageDoseQuantityAllowedFractions, DosageDoseUnitSameCode, DosageDoseValueDecimalNotation, DosageDoseValuePositive, DosageFourSlotPatternInText, PatientInstructionIdentical, MaxDoseSameUnitAsDose, MaxDosePerPeriodOnly24hOr1d, MaxDoseOnlyPureAsNeeded, DoseRangeHighRequiredWhenLowPresent, DoseRangeLowAndHighSameUnit, DoseRangeNoVarPeriod, MinimumIntervalOnlyPureAsNeeded, AsNeededForRequiresAsNeeded, AsNeededSingleDosageOnly, AsNeededIdentical, AsNeededForIdentical, MinimumIntervalUnitMatchesCode
... id 0..1 string Unique id for inter-element referencing
... Slices for extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... extension:asNeededFor S 0..* (Complex) Dosage asNeededFor
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor"
..... value[x] 0..1 CodeableConcept Value of extension
Binding: SNOMEDCTMedicationAsNeededReasonCodes (example)
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... text SΣ 1..1 string Plain text representation of the concept
... Slices for modifierExtension ?!Σ 0..* Extension Extension
Slice: Unordered, Open by value:url
.... modifierExtension:minimumIntervalBetweenAdministrations ?!SΣ 0..1 (Complex) Minimum Interval Between Administrations
URL: http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0 Extension
Slice: Unordered, Open by value:url
..... url 1..1 uri "http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations"
..... value[x] S 1..1 Duration Mindestabstand zwischen zwei Gaben
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
...... code SΣ 1..1 code Coded form of the unit
Binding: Mindestabstand UnitsOfTime dgMP ValueSet (required)
... patientInstruction SΣ 0..1 string Ergänzende Anwendungshinweise für Patientinnen und Patienten
... timing SΣ 0..1 TimingDgMP Wann das Medikament verabreicht werden soll
... asNeeded[x] SΣ 0..1 boolean Bedarfsdosierung (nur Ja/Nein-Angabe)
... doseAndRate SΣ 0..1 Element Menge des verabreichten Medikaments
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... Slices for dose[x] SΣ 0..1 Amount of medication per dose
Slice: Unordered, Closed by type:$this
..... doseRange Range
..... doseQuantity Quantity(SimpleQuantity)
..... dose[x]:doseQuantity SΣ 0..1 SimpleQuantity Menge des Medikaments pro Dosis
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... value SΣ 1..1 decimal Numerical value (with implicit precision)
...... unit SΣ 1..1 string Unit representation
...... system SΣC 1..1 uri System that defines coded unit form
...... code SΣ 1..1 code Coded form of the unit
..... dose[x]:doseRange SΣ 0..1 Range Amount of medication per dose
...... id 0..1 string Unique id for inter-element referencing
...... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
...... low SΣ 0..1 SimpleQuantity(4.0.1) Low limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... id 0..1 string Unique id for inter-element referencing
....... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
...... high SΣ 0..1 SimpleQuantity(4.0.1) High limit
Binding: https://fhir.kbv.de/ValueSet/KBV_VS_SFHIR_BMP_DOSIEREINHEIT (required)
....... id 0..1 string Unique id for inter-element referencing
....... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
....... value SΣ 1..1 decimal Numerical value (with implicit precision)
....... unit SΣ 1..1 string Unit representation
....... system SΣC 1..1 uri System that defines coded unit form
....... code SΣ 1..1 code Coded form of the unit
... maxDosePerPeriod SΣ 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all( extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() = ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).extension.where( url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor' ).value.ofType(CodeableConcept).text.distinct().count() )
AsNeededForRequiresAsNeeded error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).asNeeded.ofType(boolean).exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(asNeeded.ofType(boolean).exists()) ) )
AsNeededSingleDosageOnly error Dosage If an as-needed dosage with asNeededBoolean = true is given without timing, exactly one Dosage element must exist in the resource. ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where( asNeeded.ofType(boolean) = true and timing.empty() ).exists() implies ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1
DosageDoseQuantityAllowedFractions error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseUnitSameCodeWarning warning Dosage The dose unit should be the same across all dosages. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( doseAndRate.exists() implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Quantity).code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).low.code | (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).doseAndRate.dose.ofType(Range).high.code ).distinct().count() = 1 )
DosageDoseValueDecimalNotation error 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. 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()
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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredOrFreeTextWarning warning Dosage A dosage must be given either as free text only or as complete structured information only; mixing both is not allowed. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (text.exists() and timing.empty() and doseAndRate.empty()) or (text.empty() and (timing.exists() or doseAndRate.exists())) )
DosageStructuredRequiresBoth error Dosage If a structured dosage is given, both timing and doseAndRate must be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresBothWarning warning Dosage If a structured dosage is given, both timing and doseAndRate should be present. For pure as-needed dosages, doseAndRate may be given without timing. (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage).all( (timing.exists() implies doseAndRate.exists()) and (doseAndRate.exists() implies ( timing.exists() or asNeeded.ofType(boolean) = true or extension.where(url='http://hl7.org/fhir/5.0/StructureDefinition/extension-Dosage.asNeededFor').exists() )) )
DosageStructuredRequiresGeneratedText error Dosage If a structured dosage is present (doseAndRate populated, text empty, plus timing or a pure as-needed dosage), the GeneratedDosageInstructionsMeta extension must be present. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists( text.empty() and doseAndRate.exists() and (timing.exists() or asNeeded.ofType(boolean) = true) ) ) implies ( %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() ) )
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) AND the renderedDosageInstruction extension is populated, the value in dosageInstruction.text must match the value in the extension. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).where(text.exists() and timing.empty() and doseAndRate.empty()).exists() ) implies ( ( %resource.ofType(MedicationRequest).exists() and ( %resource.extension.where( url = 'http://hl7.org/fhir/5.0/StructureDefinition/extension-MedicationRequest.renderedDosageInstruction' ).empty() or %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' ).empty() or %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' ).empty() or %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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
FreeTextSingleDosageOnlyWarning warning Dosage If a dosage is given as pure free text, there should be exactly one Dosage element. ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).exists(text.exists() and timing.empty() and doseAndRate.empty()) ) implies ( (%resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).count() = 1 )
MaxDoseOnlyPureAsNeeded error Dosage A maximum amount (maxDosePerPeriod) may only be given for a pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines how much is applied within the reference period. maxDosePerPeriod.exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MaxDosePerPeriodOnly24hOr1d error 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 pure as-needed dosage: asNeededBoolean = true and no timing. A structured rhythm already determines the spacing between administrations; a second, weaker lower bound next to it is contradictory. modifierExtension.where(url='http://ig.fhir.de/igs/medication/StructureDefinition/MinimumIntervalBetweenAdministrations').exists() implies (asNeeded.ofType(boolean) = true and timing.empty())
MinimumIntervalUnitMatchesCode error 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 | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.distinct().count() <= 1 ) and ( ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).patientInstruction.exists() ) implies ( ( %resource.ofType(MedicationRequest).dosageInstruction | %resource.ofType(MedicationDispense).dosageInstruction | %resource.ofType(MedicationStatement).dosage ).all(patientInstruction.exists()) ) )
dos-1 error 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()

This structure is derived from DosageDE

Summary

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

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron