def is_abnormal_status(status: str, error_code: str) -> bool:
"""Determine if a status/errorCode is 'abnormal' per OCPP 1.6."""
status = (status or "").capitalize()
error_code = (error_code or "").capitalize()
# Available/NoError or Preparing are 'normal'
if status in ("Available", "Preparing") and error_code in ("Noerror", "", None):
return False
# All Faulted, Unavailable, Suspended, etc. are abnormal
if status in ("Faulted", "Unavailable", "Suspendedev", "Suspended", "Removed"):
return True
if error_code not in ("Noerror", "", None):
return True
return False