diff --git a/healthchain/data_generators/basegenerators.py b/healthchain/data_generators/basegenerators.py index e8a15ee5..4bf54335 100644 --- a/healthchain/data_generators/basegenerators.py +++ b/healthchain/data_generators/basegenerators.py @@ -9,6 +9,7 @@ from fhir.resources.codeableconcept import CodeableConcept from fhir.resources.coding import Coding +from healthchain.data_generators.coding_utils import create_coding faker = Faker() @@ -195,11 +196,10 @@ def generate_from_valueset(ValueSet): return CodeableConcept( coding=[ - Coding( + create_coding( system=value_set_instance.system, code=code, display=display, - # extension=[Extension(value_set_instance.extension)], ) ] ) diff --git a/healthchain/data_generators/coding_utils.py b/healthchain/data_generators/coding_utils.py new file mode 100644 index 00000000..e1b82a59 --- /dev/null +++ b/healthchain/data_generators/coding_utils.py @@ -0,0 +1,30 @@ +from typing import Optional, Dict, Any + +# Common system URIs +SNOMED_CT_URI = "http://snomed.info/sct" +ICD10_URI = "http://hl7.org/fhir/sid/icd-10" +LOINC_URI = "http://loinc.org" + + +def create_coding( + code: str, + system: str, + display: Optional[str] = None, + version: Optional[str] = None, +) -> Dict[str, Any]: + """Create a standardized FHIR Coding dict. + + Mirrors the FHIR Coding structure and keeps optional fields omitted when None, + which matches how other helpers in the codebase behave. + """ + coding: Dict[str, Any] = { + "system": system, + "code": code, + } + if display is not None: + coding["display"] = display + if version is not None: + coding["version"] = version + return coding + + diff --git a/healthchain/data_generators/patientgenerators.py b/healthchain/data_generators/patientgenerators.py index 61b15704..1f08309f 100644 --- a/healthchain/data_generators/patientgenerators.py +++ b/healthchain/data_generators/patientgenerators.py @@ -15,6 +15,7 @@ from fhir.resources.period import Period from fhir.resources.codeableconcept import CodeableConcept from fhir.resources.coding import Coding +from healthchain.data_generators.coding_utils import create_coding from fhir.resources.patient import Patient @@ -81,7 +82,7 @@ def generate(): marital_code = faker.random_element(elements=(marital_status_dict.keys())) return CodeableConcept( coding=[ - Coding( + create_coding( system="http://terminology.hl7.org/CodeSystem/v3-MaritalStatus", code=marital_code, display=marital_status_dict.get(marital_code), diff --git a/healthchain/data_generators/practitionergenerators.py b/healthchain/data_generators/practitionergenerators.py index f0950cb2..86b00895 100644 --- a/healthchain/data_generators/practitionergenerators.py +++ b/healthchain/data_generators/practitionergenerators.py @@ -14,6 +14,7 @@ ) from fhir.resources.codeableconcept import CodeableConcept from fhir.resources.coding import Coding +from healthchain.data_generators.coding_utils import create_coding faker = Faker() @@ -37,7 +38,7 @@ def generate(): ) return CodeableConcept( coding=[ - Coding( + create_coding( system="http://example.org", code=random_qual, display=QualificationGenerator.qualification_dict.get(random_qual), @@ -79,7 +80,7 @@ def generate(): language = faker.random_element(elements=language_value_dict.keys()) return CodeableConcept( coding=[ - Coding( + create_coding( system="http://terminology.hl7.org/CodeSystem/languages", code=language, display=language_value_dict.get(language),