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:
committed by
Alex Galarce
parent
d55a4b8fd2
commit
732d345d7f
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user