import re import unicodedata POLIZA_PATTERN = re.compile(r"[A-Z0-9\-]{4,30}") def normalize_text(value: str) -> str: return " ".join((value or "").strip().split()) def normalize_for_search(value: str) -> str: base = normalize_text(value).casefold() return "".join( ch for ch in unicodedata.normalize("NFD", base) if unicodedata.category(ch) != "Mn" ) def normalize_poliza(value: str) -> str: return normalize_text(value).upper() def is_valid_poliza(value: str) -> bool: return bool(POLIZA_PATTERN.fullmatch(value or "")) def validate_contacto(value: str) -> bool: cleaned = normalize_text(value) if not cleaned: return False if "@" in cleaned: return bool(re.fullmatch(r"[^@\s]+@[^@\s]+\.[^@\s]+", cleaned)) return bool(re.fullmatch(r"[\d\s+\-()]{6,}", cleaned))