Skip to content

Commit 7f2cb10

Browse files
committed
update generators
1 parent 47720c9 commit 7f2cb10

3 files changed

Lines changed: 56 additions & 39 deletions

File tree

apps/bfd-model/bfd-model-idr/sample-data/generator/claims_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ def add_meta_timestamps(obj, clm, max_date):
743743
def main():
744744
parser = argparse.ArgumentParser(description='Generate Synthetic Data for Ingestion by the BFD v3 pipeline.')
745745
parser.add_argument('--sushi', '-s', action='store_true', help='Generate new StructureDefinitions. Use when testing locally if new .fsh files have been added.')
746-
parser.add_argument('--benes', '-b', type=str, help='Pull BENE_SKs from the input file. Expected format is that of SYNTHETIC_BENE.csv')
746+
parser.add_argument('--benes', '-b', type=str, help='Pull BENE_SKs from the input file. Expected format is that of SYNTHETIC_BENE_HSTRY.csv')
747747

748748
args = parser.parse_args()
749749
if(args.sushi):

apps/bfd-model/bfd-model-idr/sample-data/generator/generator_util.py

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def __init__(self):
1818
self.fake = Faker()
1919
self.used_bene_sk = []
2020
self.used_mbi = []
21-
self.bene_table = []
2221
self.bene_hstry_table = []
22+
self.bene_xref_table = []
2323
self.mbi_table = {}
2424
self.address_options = []
2525
self.mdcr_stus = []
@@ -108,6 +108,29 @@ def gen_bene_sk(self):
108108
if bene_sk in self.used_bene_sk:
109109
return self.gen_bene_sk()
110110
return bene_sk
111+
112+
def generate_bene_xref(self, new_bene_sk, old_bene_sk):
113+
#10% chance for invalid xref.
114+
kill_cred_cd = 1 if random.randint(1, 10) == 1 else 2
115+
116+
efctv_ts = self.fake.date_time_between_dates(
117+
datetime.date(year=2017, month=5, day=20),
118+
datetime.datetime.now() - datetime.timedelta(days=1)
119+
)
120+
insrt_ts = self.fake.date_time_between_dates(efctv_ts, datetime.datetime.now() - datetime.timedelta(days=1))
121+
updt_ts = self.fake.date_time_between_dates(insrt_ts, datetime.datetime.now() - datetime.timedelta(days=1))
122+
123+
xref_row = {
124+
"BENE_SK": str(new_bene_sk),
125+
"BENE_XREF": str(old_bene_sk),
126+
"BENE_KILL_CRED_CD": str(kill_cred_cd),
127+
"IDR_TRANS_EFCTV_TS": str(efctv_ts),
128+
"IDR_INSRT_TS": str(insrt_ts),
129+
"IDR_UPDT_TS": str(updt_ts),
130+
"IDR_TRANS_OBSLT_TS": "9999-12-31T00:00:00.000000+0000"
131+
}
132+
133+
self.bene_xref_table.append(xref_row)
111134

112135
def gen_address(self):
113136
return self.address_options[random.randint(0, len(self.address_options) - 1)]
@@ -260,45 +283,31 @@ def generate_coverages(self, patient):
260283
def save_output_files(self):
261284
Path("out").mkdir(exist_ok=True)
262285

263-
df = pd.json_normalize(self.bene_table)
264-
df = df[
265-
[
266-
"BENE_SK",
267-
"BENE_XREF_EFCTV_SK",
268-
"BENE_MBI_ID",
269-
"BENE_LAST_NAME",
270-
"BENE_1ST_NAME",
271-
"BENE_MIDL_NAME",
272-
"BENE_BRTH_DT",
273-
"BENE_DEATH_DT",
274-
"BENE_VRFY_DEATH_DAY_SW",
275-
"BENE_SEX_CD",
276-
"BENE_RACE_CD",
277-
"BENE_LINE_1_ADR",
278-
"BENE_LINE_2_ADR",
279-
"BENE_LINE_3_ADR",
280-
"BENE_LINE_4_ADR",
281-
"BENE_LINE_5_ADR",
282-
"BENE_LINE_6_ADR",
283-
"GEO_ZIP_PLC_NAME",
284-
"GEO_ZIP5_CD",
285-
"GEO_USPS_STATE_CD",
286-
"CNTCT_LANG_CD",
287-
"IDR_TRANS_EFCTV_TS",
288-
"IDR_INSRT_TS",
289-
"IDR_UPDT_TS",
290-
"IDR_TRANS_OBSLT_TS",
291-
]
292-
]
293-
df.to_csv("out/SYNTHETIC_BENE.csv", index=False)
294-
295286
df = pd.json_normalize(self.bene_hstry_table)
296287
if(df.size>0):
297288
df = df[
298289
[
299290
"BENE_SK",
300291
"BENE_XREF_EFCTV_SK",
301292
"BENE_MBI_ID",
293+
"BENE_LAST_NAME",
294+
"BENE_1ST_NAME",
295+
"BENE_MIDL_NAME",
296+
"BENE_BRTH_DT",
297+
"BENE_DEATH_DT",
298+
"BENE_VRFY_DEATH_DAY_SW",
299+
"BENE_SEX_CD",
300+
"BENE_RACE_CD",
301+
"BENE_LINE_1_ADR",
302+
"BENE_LINE_2_ADR",
303+
"BENE_LINE_3_ADR",
304+
"BENE_LINE_4_ADR",
305+
"BENE_LINE_5_ADR",
306+
"BENE_LINE_6_ADR",
307+
"GEO_ZIP_PLC_NAME",
308+
"GEO_ZIP5_CD",
309+
"GEO_USPS_STATE_CD",
310+
"CNTCT_LANG_CD",
302311
"IDR_TRANS_EFCTV_TS",
303312
"IDR_INSRT_TS",
304313
"IDR_UPDT_TS",
@@ -332,3 +341,7 @@ def save_output_files(self):
332341
df = pd.json_normalize(self.mdcr_rsn)
333342
df.to_csv("out/SYNTHETIC_BENE_MDCR_ENTLMT_RSN.csv", index=False)
334343

344+
df = pd.json_normalize(self.bene_xref_table)
345+
if(df.size>0):
346+
df.to_csv("out/SYNTHETIC_BENE_XREF.csv", index=False)
347+

apps/bfd-model/bfd-model-idr/sample-data/generator/patient_generator.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# Command line argument parsing
1616
parser = argparse.ArgumentParser(description='Generate synthetic patient data')
1717
parser.add_argument('--benes', type=str, help='Path to CSV file containing beneficiary data')
18-
parser.add_argument('--claims', action='store_true', help='Automatically generate claims after patient generation using the generated SYNTHETIC_BENE.csv file')
18+
parser.add_argument('--claims', action='store_true', help='Automatically generate claims after patient generation using the generated SYNTHETIC_BENE_HSTRY.csv file')
1919
args = parser.parse_args()
2020

2121
patients_to_generate = 15
@@ -177,9 +177,13 @@
177177
if idx == 0:
178178
continue
179179
prior_patient = copy.deepcopy(patient)
180+
old_bene_sk = prior_patient["BENE_SK"]
180181
pt_bene_sk = generator.gen_bene_sk()
181182
prior_patient["BENE_SK"] = str(pt_bene_sk)
182183
generator.used_bene_sk.append(pt_bene_sk)
184+
185+
generator.generate_bene_xref(pt_bene_sk, old_bene_sk)
186+
183187
generator.set_timestamps(
184188
prior_patient, datetime.date(year=2017, month=5, day=20)
185189
)
@@ -188,20 +192,20 @@
188192
past_year_date = datetime.date.today() - datetime.timedelta(days=random.randint(30, 365))
189193
prior_patient["IDR_TRANS_OBSLT_TS"] = f"{past_year_date}T00:00:00.000000+0000"
190194

191-
generator.bene_table.append(prior_patient)
195+
generator.bene_hstry_table.append(prior_patient)
192196

193-
generator.bene_table.append(patient)
197+
generator.bene_hstry_table.append(patient)
194198

195199
generator.save_output_files()
196200

197201
# If --claims flag is provided, automatically call claims_generator.py
198202
if args.claims:
199203
print("Generating claims for generated benes")
200204
try:
201-
# Call claims_generator.py with the generated SYNTHETIC_BENE.csv file
205+
# Call claims_generator.py with the generated SYNTHETIC_BENE_HSTRY.csv file
202206
result = subprocess.run([
203207
sys.executable, 'claims_generator.py',
204-
'--benes', 'out/SYNTHETIC_BENE.csv'
208+
'--benes', 'out/SYNTHETIC_BENE_HSTRY.csv'
205209
], check=True, capture_output=True, text=True)
206210

207211
print("Claims generation completed successfully!")

0 commit comments

Comments
 (0)