Merged in bugfix/payer_name_provider_state (pull request #780)

Bugfix/payer name provider state to main

* updated provider state

* updated prompt

* Merged main into bugfix/payer_name_provider_state

* updated smart chunked field types

* added post processing for provider state

* field check added

* filter by field_type instead of retrieval question

* Merged main into bugfix/payer_name_provider_state


Approved-by: Katon Minhas
This commit is contained in:
VenkataKrishna Reddy Avula
2025-11-19 19:02:45 +00:00
committed by Katon Minhas
parent f8ceb39111
commit 18d893c40a
4 changed files with 108 additions and 22 deletions
+73
View File
@@ -575,3 +575,76 @@ def flatten_to_strings(items) -> list[str]:
result.append(str(items).strip())
return result
def parse_state_field_to_list(raw_value):
"""
Convert PROVIDER_STATE raw input into a clean list of state strings.
Accepts:
- list → returned as-is
- JSON list string → parsed to list
- comma-separated string → split to list
- single string → wrapped in list
- other types → converted to string → wrapped in list
Returns:
list[str]: Clean list of state strings
"""
if raw_value is None:
return []
# Case 1: Already a list
if isinstance(raw_value, list):
return raw_value
# Case 2: String input
if isinstance(raw_value, str):
stripped = raw_value.strip()
# JSON list string
if stripped.startswith("[") and stripped.endswith("]"):
try:
parsed = json.loads(stripped)
if isinstance(parsed, list):
return parsed
else:
return [parsed]
except Exception as e:
logging.debug(f"Failed JSON parse for state list: {e}. Falling back to comma split.")
# fallback: treat as comma-separated
# Comma-separated list
if "," in stripped:
return [s.strip() for s in stripped.split(",") if s.strip()]
# Single state string
return [stripped]
# Case 3: Any other type (int, dict, etc.)
try:
return [str(raw_value).strip()]
except Exception:
logging.error(f"Could not convert value to string: {raw_value!r}")
return []
def normalize_provider_state_field(answers_dict: dict, field_name: str = "PROVIDER_STATE"):
if field_name not in answers_dict or not answers_dict[field_name]:
answers_dict[field_name] = []
return answers_dict
raw_value = answers_dict[field_name]
# ---- Step 1: Parse into list ----
state_list = parse_state_field_to_list(raw_value)
# ---- Step 2: Normalize each state ----
normalized_states = []
for state in state_list:
try:
normalized_states.append(normalize_state_to_abbreviation(state))
except Exception as e:
logging.warning(f"Failed to normalize state '{state}': {e}. Keeping original.")
normalized_states.append(state)
answers_dict[field_name] = normalized_states
return answers_dict