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
This commit is contained in:
VenkataKrishna Reddy Avula
2025-03-06 18:51:05 +00:00
committed by Alex Galarce
parent d55a4b8fd2
commit 732d345d7f
+22 -22
View File
@@ -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)