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:
committed by
Katon Minhas
parent
f8ceb39111
commit
18d893c40a
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user