From 732d345d7fdae9df3ea12e2c4613e8a052b67fad Mon Sep 17 00:00:00 2001 From: VenkataKrishna Reddy Avula Date: Thu, 6 Mar 2025 18:51:05 +0000 Subject: [PATCH] Merged in feature/daip2-123 (pull request #425) Feature/daip2-123 to Main * indirect proc codes added * bug fix * bug fix * Merge branch 'main' into proc-code-indirect * bug fix * diag cd indirect added * Merge branch 'main' into daip2-111 * modified get code description for revenue codes * removed print statements * Merged main into feature/daip2-123 * Merge remote-tracking branch 'origin/main' into feature/daip2-123 * Merged main into feature/daip2-123 * modified find containing ranges * modified get code description * updated get code description function * updated descriptions code * Merge remote-tracking branch 'origin/main' into feature/daip2-123 Approved-by: Katon Minhas --- fieldExtraction/src/investment/code_funcs.py | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/fieldExtraction/src/investment/code_funcs.py b/fieldExtraction/src/investment/code_funcs.py index b7eb850..1fc673c 100644 --- a/fieldExtraction/src/investment/code_funcs.py +++ b/fieldExtraction/src/investment/code_funcs.py @@ -90,6 +90,7 @@ def find_containing_ranges(input_range: str, code_mapping: dict) -> list[dict]: Returns: list: List of dictionaries containing matching code ranges and descriptions """ + print("finding ranges for", input_range) # Parse the input range match = re.match(r'(\d+)-(\d+)', input_range) if not match: @@ -118,8 +119,7 @@ def find_containing_ranges(input_range: str, code_mapping: dict) -> list[dict]: 'overlap_start': max(input_start, csv_start), 'overlap_end': min(input_end, csv_end) }) - # Extract only the code_range values - # code_ranges = [result['code_range'] for result in results] + # If no single range contains all others, return the highest level ranges highest_level_ranges = [] for result in results: @@ -130,8 +130,11 @@ def find_containing_ranges(input_range: str, code_mapping: dict) -> list[dict]: break if is_highest: highest_level_ranges.append(result['code_range']) + + # if len(highest_level_ranges) == 0: + # highest_level_ranges = [f"{i}" for i in range(input_start, input_end + 1)] + return highest_level_ranges - # return code_ranges def code_primary(answer_dicts, filename): """ @@ -347,15 +350,9 @@ def get_code_description(code, code_mapping): elif "[" in code and "]" in code: code_list = ast.literal_eval(code) elif "," in code: - code_list = code.split(",") - elif "-" in code: - try: - code_list = find_containing_ranges(code, code_mapping.mapping) - except ValueError as e: - print(f"Failed to parse code range: {code}; error {e}") - code_list = [code] + code_list = code.split(",") else: - code_list = [code] # added this line to handle range strings like 'J0120-J7175' + code_list = [code] # added this line to handle range strings like 'J0120-J7175' or "70010-79999" elif isinstance(code, list): code_list = code else: @@ -380,22 +377,25 @@ def get_code_description(code, code_mapping): description = code_mapping.mapping.get(expanded_code_range, "mismap") # If mismap, try to handle numeric codes if string_utils.is_empty(description) or description == "mismap": - numeric_codes_description = [] - for i in range(10): - expanded_code = base_code + str(i) - inner_description = code_mapping.mapping.get(expanded_code, "mismap") - if inner_description != "mismap": - numeric_codes_description.append(inner_description) - description = ", ".join(numeric_codes_description) + x_range_code_list = [int(f"{base_code}{i}") for i in range(10)] + description = get_code_description(x_range_code_list, code_mapping) + + elif "-" in code_str and all(part.isdigit() for part in code_str.split("-")): + try: + range_code_list = find_containing_ranges(code_str, code_mapping.mapping) + description = get_code_description(range_code_list, code_mapping) + except ValueError as e: + print(f"Failed to parse code range: {code_str}; error {e}") + description = "mismap" + # # If mismap, try to handle just starting range value and ending range value separately + # if string_utils.is_empty(description) or description == "mismap": + # description = get_code_description(code_str.split("-"), code_mapping) + else: # If mismap, prepend "0" and try again (useful for rev codes) code_str = "0" + code_str description = code_mapping.mapping.get(code_str, "mismap") - # We need similar logic for Diag codes with X (e.g. 123X) - # Could either: a) convert to list ([1230, 1231, ...]), b) convert to range (1230-1239), c) leave as is (123X) but have the descriptions be a list ["desc1","desc2", etc] - # for i in range(10): code is '123' + i' map that code - if not string_utils.is_empty(description): code_description.append(description)