from __future__ import annotations import re import unicodedata from typing import Any _DIGIT_WORDS = { "zero": "0", "um": "1", "uma": "1", "dois": "2", "duas": "2", "tres": "3", "quatro": "4", "cinco": "5", "seis": "6", "sete": "7", "oito": "8", "nove": "9", } def _norm(text: Any) -> str: value = unicodedata.normalize("NFKD", str(text or "").casefold()) value = "".join(ch for ch in value if not unicodedata.combining(ch)) return re.sub(r"\s+", " ", value).strip() def extract_requested_line_reference(text: Any) -> dict[str, str] | None: """Extrai somente uma referência explícita de linha citada pelo usuário. Não transforma a referência em identidade autorizada. Essa decisão pertence à política de linha ativa no domínio Contas. """ raw = str(text or "").strip() if not raw: return None norm = _norm(raw) # Número completo explicitamente presente no texto (10 a 13 dígitos, com # separadores opcionais). Evita capturar valores monetários ou protocolos curtos. for match in re.finditer(r"(?