@@ -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 ))
0 commit comments