feat: normalizar_telefone_com_ddi/normalizar_uf/normalizar_cep

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-14 12:14:39 -03:00
co-authored by Claude Sonnet 5
parent 5c577a644a
commit 8b5e7e251e
2 changed files with 68 additions and 0 deletions
+33
View File
@@ -46,6 +46,39 @@ def normalizar_telefone(bruto: str | None) -> str:
return _RE_NAO_DIGITO.sub("", bruto or "")
_RE_NAO_LETRA = re.compile(r"[^A-Z]")
def normalizar_telefone_com_ddi(bruto: str | None) -> str:
"""
Remove máscara (normalizar_telefone) e garante o DDI 55 embutido no
início — usado para TELEFONE/CELULAR de CLIENTE, que passam a ser
gravados sempre com DDI, mesmo que o usuário não digite (mesmo padrão
que CLIENTE_CONTATO.TELEFONE já usa para envio de WhatsApp).
Um valor de 12-13 dígitos começando com "55" é tratado como já tendo
DDI (não duplica). Qualquer outro tamanho não vazio recebe "55" na
frente. Vazio continua vazio (campo não obrigatório).
"""
digitos = normalizar_telefone(bruto)
if not digitos:
return ""
if digitos.startswith("55") and len(digitos) in (12, 13):
return digitos
return "55" + digitos
def normalizar_uf(bruto: str | None) -> str:
"""Só letras, maiúsculas, no máximo 2 caracteres."""
limpo = _RE_NAO_LETRA.sub("", (bruto or "").upper())
return limpo[:2]
def normalizar_cep(bruto: str | None) -> str:
"""Só dígitos, no máximo 8 caracteres (sem traço)."""
return _RE_NAO_DIGITO.sub("", bruto or "")[:8]
_PESOS_CPF_DV1 = [10, 9, 8, 7, 6, 5, 4, 3, 2]
_PESOS_CPF_DV2 = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
_PESOS_CNPJ_DV1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]