Merged in feature/rename-proc-cd (pull request #645)

rename columns function

* rename columns function

* update columns


Approved-by: Alex Galarce
This commit is contained in:
Katon Minhas
2025-08-04 16:10:26 +00:00
parent c2d5db19d4
commit 1c15489370
4 changed files with 80 additions and 4 deletions
@@ -84,8 +84,8 @@ COLUMN_ORDER = [
"FEE_SCHEDULE_VERSION",
"AARETE_DERIVED_FEE_SCHEDULE_VERSION",
"SERVICE_TERM",
"PROCEDURE_CD",
"PROCEDURE_CD_DESC",
"CPT4_PROC_CD",
"CPT4_PROC_CD_DESC",
"CPT4_PROC_MOD",
"CPT4_PROC_MOD_DESC",
"REVENUE_CD",
@@ -20,6 +20,26 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__fil
MAPPINGS_DIR = os.path.join(BASE_DIR, 'crosswalk', 'mappings')
def rename_columns(df):
"""
Use the provided mapping to rename columns in the data
Args:
df (pd.DataFrame): The input DataFrame with columns to be renamed.
Returns:
pd.DataFrame: The DataFrame with renamed columns.
"""
# Check if the DataFrame is empty, return it as is if it is
if df.empty:
return df
# If not empty, proceed with column renaming
rename_map = {"PROCEDURE_CD" : "CPT4_PROC_CD",
"PROCEDURE_CD_DESC" : "CPT4_PROC_CD_DESC"}
# Rename columns using the mapping
df = df.rename(columns=rename_map)
return df
def normalize_indicator_field(value: str) -> str:
"""
@@ -8,16 +8,18 @@ from src.prompts.investment_prompts import FieldSet, invoke_derived_term_date
def postprocess(df):
if df.shape[0] > 0:
# Add postprocessing here
df['CLIENT_NAME'] = config.CLIENT_NAME
# Rename columns
df = investment_postprocessing_funcs.rename_columns(df)
# Sort to ensure consistent ordering
sort_columns = ['FILE_NAME']
if 'EXHIBIT_PAGE' in df.columns:
sort_columns.append('EXHIBIT_PAGE')
if 'REIMB_LESSER_OF_ID' in df.columns:
sort_columns.append('REIMB_LESSER_OF_ID')
df = df.sort_values(by=sort_columns).reset_index(drop=True)
# Postprocess date fields
@@ -15,6 +15,7 @@ from src.investment.investment_postprocessing_funcs import (
process_patient_age_range,
remove_redundant_reimb_info,
deduplicate_provider_columns,
rename_columns
)
@@ -47,6 +48,59 @@ class TestPostprocessFunctions(unittest.TestCase):
self.assertEqual(flatten_singleton_string_list("invalid"), "invalid")
self.assertEqual(flatten_singleton_string_list(None), "")
def test_rename_columns(self):
"""Tests the rename_columns function to ensure it correctly renames specified columns.
Tests:
1. Basic column renaming from PROCEDURE_CD to CPT4_PROC_CD
2. Multiple columns being renamed
3. Handling of columns not in the rename map
4. Empty DataFrame
"""
# Test case 1: Basic column renaming
input_df1 = pd.DataFrame({
"PROCEDURE_CD": ["12345", "67890"],
"PROCEDURE_CD_DESC": ["Test Procedure", "Another Procedure"],
"OTHER_COLUMN": ["value1", "value2"]
})
expected_df1 = pd.DataFrame({
"CPT4_PROC_CD": ["12345", "67890"],
"CPT4_PROC_CD_DESC": ["Test Procedure", "Another Procedure"],
"OTHER_COLUMN": ["value1", "value2"]
})
result_df1 = rename_columns(input_df1)
pd.testing.assert_frame_equal(result_df1, expected_df1)
# Test case 2: Only some columns need renaming
input_df2 = pd.DataFrame({
"PROCEDURE_CD": ["12345", "67890"],
"OTHER_COLUMN": ["value1", "value2"]
})
expected_df2 = pd.DataFrame({
"CPT4_PROC_CD": ["12345", "67890"],
"OTHER_COLUMN": ["value1", "value2"]
})
result_df2 = rename_columns(input_df2)
pd.testing.assert_frame_equal(result_df2, expected_df2)
# Test case 3: None of the columns need renaming
input_df3 = pd.DataFrame({
"COLUMN_A": ["a", "b"],
"COLUMN_B": ["c", "d"]
})
result_df3 = rename_columns(input_df3)
pd.testing.assert_frame_equal(result_df3, input_df3) # Should be unchanged
# Test case 4: Empty DataFrame
empty_df = pd.DataFrame()
result_empty_df = rename_columns(empty_df)
pd.testing.assert_frame_equal(result_empty_df, empty_df) # Should be unchanged
@patch("src.utils.llm_utils.invoke_claude")
@patch("src.investment.investment_postprocessing_funcs.invoke_derived_term_date")