diff --git a/fieldExtraction/src/investment/tin_npi_funcs.py b/fieldExtraction/src/investment/tin_npi_funcs.py index a0222f2..7451e93 100644 --- a/fieldExtraction/src/investment/tin_npi_funcs.py +++ b/fieldExtraction/src/investment/tin_npi_funcs.py @@ -179,6 +179,11 @@ def reimbursement_tin_npi(exhibit_chunk: str, reimbursement_level_fields: FieldS REIMB_PROV_TIN, REIMB_PROV_NPI """ + def get_list(field_name, filtered_providers): + # Get all values and filter out invalid ones + all_values = [provider.get(field_name, "N/A") for provider in filtered_providers] + valid_values = [val for val in all_values if not string_utils.is_empty(val) and val != "UNKNOWN"] + return list(set(valid_values)) # Remove duplicates answer_dict = {} @@ -187,28 +192,27 @@ def reimbursement_tin_npi(exhibit_chunk: str, reimbursement_level_fields: FieldS # Clean, standardize, and deduplicate extracted providers filtered_providers = deduplicate_providers(clean_provider_info(providers)) + + field_configs = [ + ("REIMB_PROV_TIN", "TIN"), + ("REIMB_PROV_NPI", "NPI"), + ("REIMB_PROV_NAME", "NAME") + ] # Always add providers to reimbursement_level fields for proper term attribution - if len(filtered_providers) > 0: - tin_field = Field.load_from_file(config.FIELD_JSON_PATH, "REIMB_PROV_TIN") - tin_list = list(set([provider.get("TIN", "N/A") for provider in filtered_providers])) # Remove duplicates - tin_field.update_valid_values(tin_list) - reimbursement_level_fields.add_field(tin_field) + for field_name, provider_key in field_configs: + if len(filtered_providers) > 0: + field = Field.load_from_file(config.FIELD_JSON_PATH, field_name) + value_list = get_list(provider_key, filtered_providers) - npi_field = Field.load_from_file(config.FIELD_JSON_PATH, "REIMB_PROV_NPI") - npi_list = list(set([provider.get("NPI", "N/A") for provider in filtered_providers])) # Remove duplicates - npi_field.update_valid_values(npi_list) - reimbursement_level_fields.add_field(npi_field) - - name_field = Field.load_from_file(config.FIELD_JSON_PATH, "REIMB_PROV_NAME") - name_list = list(set([provider.get("NAME", "N/A") for provider in filtered_providers])) # Remove duplicates - name_field.update_valid_values(name_list) - reimbursement_level_fields.add_field(name_field) - # If no providers are found, set default values - else: - answer_dict['REIMB_PROV_TIN'] = "N/A" - answer_dict['REIMB_PROV_NPI'] = "N/A" - answer_dict['REIMB_PROV_NAME'] = "N/A" + if len(value_list) == 0: + answer_dict[field_name] = "N/A" + else: + field.update_valid_values(value_list) + reimbursement_level_fields.add_field(field) + else: + # If no providers are found, set default values + answer_dict[field_name] = "N/A" return answer_dict, reimbursement_level_fields