Skip to content

Commit 50961b6

Browse files
Final fixes for pyright errors.
1 parent 15666a5 commit 50961b6

7 files changed

Lines changed: 305 additions & 243 deletions

File tree

apps/bfd-model-idr/augment_sample_resources.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,7 @@
8787

8888

8989
def convert_to_decimal(val: str | None) -> Decimal:
90-
try:
91-
return Decimal(val)
92-
except (TypeError, ValueError):
93-
return 0.0
90+
return Decimal(val or 0.0)
9491

9592
@dataclass
9693
class Provider:
@@ -200,13 +197,14 @@ def create_careteam_provider(careteam_column):
200197
for careteam_column in careteam_header_columns:
201198
if careteam_column not in cur_sample_data:
202199
continue
200+
203201
provider_object = create_careteam_provider(careteam_column)
204-
provider_object.careTeamSequenceNumber = sum(
205-
1 for item in provider_list if provider_object.careTeamType
206-
)
202+
203+
count = sum(1 for _ in provider_list if provider_object.careTeamType)
204+
provider_object.careTeamSequenceNumber = str(count)
205+
207206
provider_list.append(provider_object)
208207

209-
210208
# Distinct method since line items end up cleaner
211209
def create_rendering_line_provider(npi_num):
212210
provider_object = Provider(
@@ -233,11 +231,16 @@ def create_rendering_line_provider(npi_num):
233231
provider = create_rendering_line_provider(prvdr_npi_num)
234232
if line_item.get("CLM_RNDRG_FED_PRVDR_SPCLTY_CD"):
235233
provider.specialtyCode = line_item.get("CLM_RNDRG_FED_PRVDR_SPCLTY_CD")
236-
provider.careTeamSequenceNumber = sum(
237-
1 for item in provider_list if provider_object.careTeamType
238-
)
239-
line_item["careTeamSequence"] = provider.careTeamSequenceNumber
240-
provider_list.append(provider)
234+
235+
sequence_count = sum(
236+
1 for _ in provider_list
237+
if getattr(provider, "careTeamType", None)
238+
)
239+
240+
provider.careTeamSequenceNumber = str(sequence_count)
241+
242+
line_item["careTeamSequence"] = provider.careTeamSequenceNumber
243+
provider_list.append(provider)
241244

242245
if prvdr_npi_num:
243246
sequence = next(
@@ -364,7 +367,7 @@ def build_claim_audit_trail_composite(sample: dict) -> str:
364367
status = sample.get("CLM_AUDT_TRL_STUS_CD")
365368

366369
if not status:
367-
return None
370+
return ""
368371

369372
prefix = meta_src_prefix(meta_src_sk)
370373

apps/bfd-model-idr/claims_adj.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ class AdjudicatedGeneratorUtil:
4242
def __init__(self, enable_samhsa: bool) -> None:
4343
self.enable_samhsa = enable_samhsa
4444

45+
@staticmethod
46+
def safe_random_choice(sequence, default=None):
47+
"""Safely pick a random element from a sequence that might be None."""
48+
if not sequence:
49+
return default
50+
return random.choice(sequence)
51+
4552
def gen_clm(
4653
self,
4754
gen_utils: GeneratorUtil,
@@ -100,7 +107,7 @@ def gen_clm(
100107
if clm_type_cd not in PHARMACY_CLM_TYPE_CDS:
101108
clm[f.CLM_QUERY_CD] = random.choice(gen_utils.code_systems[f.CLM_QUERY_CD])
102109
else:
103-
clm[f.CLM_SRVC_PRVDR_GNRC_ID_NUM] = random.choice(type_2_npis)
110+
clm[f.CLM_SRVC_PRVDR_GNRC_ID_NUM] = self.safe_random_choice(type_2_npis)
104111
clm[f.PRVDR_SRVC_ID_QLFYR_CD] = random.choice(
105112
gen_utils.code_systems[f.PRVDR_ID_QLFYR_CD]
106113
)
@@ -109,7 +116,7 @@ def gen_clm(
109116
clm[f.PRVDR_PRSBNG_ID_QLFYR_CD] = random.choice(
110117
gen_utils.code_systems[f.PRVDR_ID_QLFYR_CD]
111118
)
112-
clm[f.CLM_PRSBNG_PRVDR_GNRC_ID_NUM] = random.choice(type_1_npis)
119+
clm[f.CLM_PRSBNG_PRVDR_GNRC_ID_NUM] = self.safe_random_choice(type_1_npis)
113120
clm[f.PRVDR_PRSCRBNG_PRVDR_NPI_NUM] = clm[f.CLM_PRSBNG_PRVDR_GNRC_ID_NUM]
114121
clm[f.CLM_SBMT_CHRG_AMT] = round(random.uniform(1, 1000000), 2)
115122
clm[f.CLM_SBMT_FRMT_CD] = random.choice(gen_utils.code_systems[f.CLM_SBMT_FRMT_CD])
@@ -142,26 +149,26 @@ def gen_clm(
142149
clm[f.CLM_LTST_CLM_IND] = clm_ltst_clm_ind
143150

144151
if (clm_type_cd < 65 and clm_type_cd >= 10) or clm_type_cd in FISS_CLM_TYPE_CDS:
145-
clm[f.PRVDR_BLG_PRVDR_NPI_NUM] = random.choice(type_2_npis)
146-
clm[f.CLM_ATNDG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
152+
clm[f.PRVDR_BLG_PRVDR_NPI_NUM] = self.safe_random_choice(type_2_npis)
153+
clm[f.CLM_ATNDG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
147154
clm[f.PRVDR_ATNDG_PRVDR_NPI_NUM] = clm[f.CLM_ATNDG_PRVDR_NPI_NUM]
148155
clm[f.CLM_OPRTG_FED_PRVDR_SPCLTY_CD] = random.choice(
149156
gen_utils.code_systems[f.CLM_PRVDR_SPCLTY_CD]
150157
)
151158
clm[f.CLM_OPRTG_PRVDR_NAME] = random.choice(["Random last, First", "~"])
152-
clm[f.CLM_OPRTG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
159+
clm[f.CLM_OPRTG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
153160
clm[f.PRVDR_OPRTG_PRVDR_NPI_NUM] = clm[f.CLM_OPRTG_PRVDR_NPI_NUM]
154161
clm[f.CLM_OTHR_FED_PRVDR_SPCLTY_CD] = random.choice(
155162
gen_utils.code_systems[f.CLM_PRVDR_SPCLTY_CD]
156163
)
157164
clm[f.CLM_OTHR_PRVDR_NAME] = random.choice(["Random last, First", "~"])
158-
clm[f.CLM_OTHR_PRVDR_NPI_NUM] = random.choice(type_1_npis)
165+
clm[f.CLM_OTHR_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
159166
clm[f.PRVDR_OTHR_PRVDR_NPI_NUM] = clm[f.CLM_OTHR_PRVDR_NPI_NUM]
160167
clm[f.CLM_RNDRG_FED_PRVDR_SPCLTY_CD] = random.choice(
161168
gen_utils.code_systems[f.CLM_PRVDR_SPCLTY_CD]
162169
)
163170
clm[f.CLM_RNDRG_PRVDR_NAME] = random.choice(["Random last, First", "~"])
164-
clm[f.CLM_RNDRG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
171+
clm[f.CLM_RNDRG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
165172
clm[f.PRVDR_RNDRNG_PRVDR_NPI_NUM] = clm[f.CLM_RNDRG_PRVDR_NPI_NUM]
166173
clm[f.CLM_ATNDG_FED_PRVDR_SPCLTY_CD] = random.choice(
167174
gen_utils.code_systems[f.CLM_PRVDR_SPCLTY_CD]
@@ -188,12 +195,12 @@ def gen_clm(
188195
clm[f.CLM_ACO_CARE_MGMT_HCBS_SW] = "Y" if "7" in used_enhancements else "N"
189196

190197
if clm_type_cd == 40 or (clm_type_cd > 70 and clm_type_cd <= 82):
191-
clm[f.PRVDR_RFRG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
198+
clm[f.PRVDR_RFRG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
192199
if clm_type_cd > 70 and clm_type_cd <= 82:
193-
clm[f.CLM_BLG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
200+
clm[f.CLM_BLG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
194201
clm[f.CLM_RLT_COND_SGNTR_SK] = "0"
195202
if random.choice([0, 1]):
196-
clm[f.CLM_BLG_PRVDR_NPI_NUM] = random.choice(type_2_npis)
203+
clm[f.CLM_BLG_PRVDR_NPI_NUM] = self.safe_random_choice(type_2_npis)
197204
clm[f.PRVDR_BLG_PRVDR_NPI_NUM] = clm[f.CLM_BLG_PRVDR_NPI_NUM]
198205

199206
# generate claim header financial elements here
@@ -788,7 +795,7 @@ def gen_clm_line(
788795
if clm_type_cd >= 71 and clm_type_cd <= 72:
789796
clm_line[f.CLM_RNDRG_PRVDR_TAX_NUM] = random.choice(["1928347912", "912834729"])
790797
clm_line[f.CLM_RNDRG_PRVDR_PIN_NUM] = random.choice(["29364819", "19238747"])
791-
clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
798+
clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
792799
clm_line[f.CLM_RNDRG_PRVDR_NPI_NUM] = clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM]
793800
clm_line[f.CLM_RNDRG_FED_PRVDR_SPCLTY_CD] = random.choice(
794801
gen_utils.code_systems[f.CLM_PRVDR_SPCLTY_CD]
@@ -818,7 +825,7 @@ def gen_clm_line(
818825
)
819826

820827
if clm_type_cd == 81 or clm_type_cd == 82:
821-
clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM] = random.choice(type_1_npis)
828+
clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM] = self.safe_random_choice(type_1_npis)
822829
clm_line[f.CLM_RNDRG_PRVDR_NPI_NUM] = clm_line[f.PRVDR_RNDRNG_PRVDR_NPI_NUM]
823830

824831
clm_line[f.CLM_LINE_HCPCS_CD] = random.choice(get_hcpcs_proc_codes(self.enable_samhsa))

apps/bfd-model-idr/claims_generator.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ def _clean_int_columns(rows: list[dict[str, Any]], cols: list[str]):
620620
return rows
621621

622622

623-
@click.command
623+
@click.command()
624624
@click.option(
625625
"--sushi/--no-sushi",
626626
envvar="SUSHI",
@@ -689,6 +689,26 @@ def generate(
689689
bene_sk_mode: BeneSkMode,
690690
paths: tuple[Path, ...],
691691
):
692+
"""CLI entry point - delegates to core logic."""
693+
generate_data(
694+
sushi=sushi,
695+
min_claims=min_claims,
696+
max_claims=max_claims,
697+
enable_samhsa=enable_samhsa,
698+
pac_gen=pac_gen,
699+
bene_sk_mode=bene_sk_mode,
700+
paths=paths,
701+
)
702+
703+
def generate_data(
704+
sushi: bool,
705+
min_claims: int,
706+
max_claims: int,
707+
enable_samhsa: bool,
708+
pac_gen: GeneratePacDataMode,
709+
bene_sk_mode: BeneSkMode,
710+
paths: tuple[Path, ...],
711+
) -> None:
692712
"""Generate synthetic claims data. Provided file PATHS will be updated with new fields."""
693713
if min_claims > max_claims:
694714
print(

apps/bfd-model-idr/load_splitter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
)
4747

4848

49-
@click.command
49+
@click.command()
5050
@click.option(
5151
"-c",
5252
"--clm-batches-size",
@@ -59,7 +59,7 @@
5959
@click.argument(
6060
"out",
6161
nargs=1,
62-
type=click.Path(exists=True, path_type=Path),
62+
type=click.Path(exists=True),
6363
default="./batched_out",
6464
)
6565
def main(clm_batches_size: int, out: Path):
@@ -203,4 +203,4 @@ def main(clm_batches_size: int, out: Path):
203203

204204

205205
if __name__ == "__main__":
206-
main()
206+
main(clm_batches_size=5)

apps/bfd-model-idr/setup_matchbox.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,11 @@ def main():
101101
if member.name.endswith(".json"):
102102
fname = Path(member.name).name.replace(".json", "")
103103
if fname in resource_set:
104-
content = json.loads(tar.extractfile(member).read())
105-
upload_resource(args.url, content, session)
106-
resource_set.remove(fname)
104+
extracted_file = tar.extractfile(member)
105+
if extracted_file is not None:
106+
content = json.loads(extracted_file.read())
107+
upload_resource(args.url, content, session)
108+
resource_set.remove(fname)
107109

108110
for missing in resource_set:
109111
logger.warning("Not found in package: %s", missing)

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ dependencies = [
1515
"asyncclick>=8.3.0.5",
1616
"anyio>=4.11.0",
1717
"pyyaml>=6.0.3",
18+
"types-click>=7.1.8",
19+
"click>=8.3.3",
1820
]
1921

2022
[tool.uv.workspace]
@@ -44,6 +46,7 @@ members = [
4446

4547
[dependency-groups]
4648
dev = [
49+
"tqdm",
4750
"ruff",
4851
"pyright",
4952
# bfd-pipeline-idr dev dependencies

0 commit comments

Comments
 (0)