Skip to content

Commit a323065

Browse files
committed
refactor(data-generators): centralize FHIR Coding creation into shared utilities and refactor generators to use it (refs #141)
1 parent 3b8b745 commit a323065

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

healthchain/data_generators/basegenerators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from fhir.resources.codeableconcept import CodeableConcept
1111
from fhir.resources.coding import Coding
12+
from healthchain.data_generators.coding_utils import create_coding
1213

1314

1415
faker = Faker()
@@ -195,11 +196,10 @@ def generate_from_valueset(ValueSet):
195196

196197
return CodeableConcept(
197198
coding=[
198-
Coding(
199+
create_coding(
199200
system=value_set_instance.system,
200201
code=code,
201202
display=display,
202-
# extension=[Extension(value_set_instance.extension)],
203203
)
204204
]
205205
)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from typing import Optional, Dict, Any
2+
3+
# Common system URIs
4+
SNOMED_CT_URI = "http://snomed.info/sct"
5+
ICD10_URI = "http://hl7.org/fhir/sid/icd-10"
6+
LOINC_URI = "http://loinc.org"
7+
8+
9+
def create_coding(
10+
code: str,
11+
system: str,
12+
display: Optional[str] = None,
13+
version: Optional[str] = None,
14+
) -> Dict[str, Any]:
15+
"""Create a standardized FHIR Coding dict.
16+
17+
Mirrors the FHIR Coding structure and keeps optional fields omitted when None,
18+
which matches how other helpers in the codebase behave.
19+
"""
20+
coding: Dict[str, Any] = {
21+
"system": system,
22+
"code": code,
23+
}
24+
if display is not None:
25+
coding["display"] = display
26+
if version is not None:
27+
coding["version"] = version
28+
return coding
29+
30+

healthchain/data_generators/patientgenerators.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from fhir.resources.period import Period
1616
from fhir.resources.codeableconcept import CodeableConcept
1717
from fhir.resources.coding import Coding
18+
from healthchain.data_generators.coding_utils import create_coding
1819
from fhir.resources.patient import Patient
1920

2021

@@ -81,7 +82,7 @@ def generate():
8182
marital_code = faker.random_element(elements=(marital_status_dict.keys()))
8283
return CodeableConcept(
8384
coding=[
84-
Coding(
85+
create_coding(
8586
system="http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
8687
code=marital_code,
8788
display=marital_status_dict.get(marital_code),

healthchain/data_generators/practitionergenerators.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
)
1515
from fhir.resources.codeableconcept import CodeableConcept
1616
from fhir.resources.coding import Coding
17+
from healthchain.data_generators.coding_utils import create_coding
1718

1819

1920
faker = Faker()
@@ -37,7 +38,7 @@ def generate():
3738
)
3839
return CodeableConcept(
3940
coding=[
40-
Coding(
41+
create_coding(
4142
system="http://example.org",
4243
code=random_qual,
4344
display=QualificationGenerator.qualification_dict.get(random_qual),
@@ -79,7 +80,7 @@ def generate():
7980
language = faker.random_element(elements=language_value_dict.keys())
8081
return CodeableConcept(
8182
coding=[
82-
Coding(
83+
create_coding(
8384
system="http://terminology.hl7.org/CodeSystem/languages",
8485
code=language,
8586
display=language_value_dict.get(language),

0 commit comments

Comments
 (0)