@@ -85,6 +85,8 @@ def validate(self):
8585 self .pre_validate_route_coding_display ,
8686 self .pre_validate_dose_quantity_value ,
8787 self .pre_validate_dose_quantity_code ,
88+ self .pre_validate_dose_quantity_system ,
89+ self .pre_validate_dose_quantity_system_and_code ,
8890 self .pre_validate_dose_quantity_unit ,
8991 self .pre_validate_reason_code_codings ,
9092 self .pre_validate_reason_code_coding_codes ,
@@ -799,9 +801,6 @@ def pre_validate_route_coding_display(self, values: dict) -> dict:
799801 except (KeyError , IndexError ):
800802 pass
801803
802- # TODO: need to validate that doseQuantity.system is "http://unitsofmeasure.org"?
803- # Check with Martin
804-
805804 def pre_validate_dose_quantity_value (self , values : dict ) -> dict :
806805 """
807806 Pre-validate that, if doseQuantity.value (legacy CSV field name: DOSE_AMOUNT) exists,
@@ -818,6 +817,17 @@ def pre_validate_dose_quantity_value(self, values: dict) -> dict:
818817 except KeyError :
819818 pass
820819
820+ def pre_validate_dose_quantity_system (self , values : dict ) -> dict :
821+ """
822+ Pre-validate that if doseQuantity.system exists then it is a non-empty string:
823+ If system exists, it must be a non-empty string.
824+ """
825+ try :
826+ field_value = values ["doseQuantity" ]["system" ]
827+ PreValidation .for_string (field_value , "doseQuantity.system" )
828+ except KeyError :
829+ pass
830+
821831 def pre_validate_dose_quantity_code (self , values : dict ) -> dict :
822832 """
823833 Pre-validate that, if doseQuantity.code (legacy CSV field name: DOSE_UNIT_CODE) exists,
@@ -829,6 +839,21 @@ def pre_validate_dose_quantity_code(self, values: dict) -> dict:
829839 except KeyError :
830840 pass
831841
842+ def pre_validate_dose_quantity_system_and_code (self , values : dict ) -> dict :
843+ """
844+ Pre-validate doseQuantity.code and doseQuantity.system:
845+ 1. If code exists, system MUST also exist (FHIR SimpleQuantity rule).
846+ """
847+ dose_quantity = values .get ("doseQuantity" , {})
848+ code = dose_quantity .get ("code" )
849+ system = dose_quantity .get ("system" )
850+
851+ PreValidation .require_system_when_code_present (
852+ code , system , "doseQuantity.code" , "doseQuantity.system"
853+ )
854+
855+ return values
856+
832857 def pre_validate_dose_quantity_unit (self , values : dict ) -> dict :
833858 """
834859 Pre-validate that, if doseQuantity.unit (legacy CSV field name: DOSE_UNIT_TERM) exists,
0 commit comments