O bug do CNPJ alfanumérico pega mais fácil em quem fez certo
Desde julho o CNPJ pode ter letras. Mas o que me pareceu mais interessante não é o formato novo — é o mecanismo de falha.
Quem guardou CNPJ como inteiro no banco tem um problema feio, mas visível. Vai dar erro de tipo quando o CNPJ com letra chegar. Vai aparecer no log. Vai virar ticket. Vai ser corrigido.
Quem fez certo e guardou como texto provavelmente limpa o campo assim antes de validar:
cnpj.replace(/\D/g, "")
Essa linha remove pontuação, mas também remove letra. Transforma 12.ABC.345/01DE-35 em 12345011035, onze caracteres, que a validação vai rejeitar sem dizer por quê. Não vai lançar exceção. Não vai aparecer no log como erro do sistema. Vai parecer dado inválido vindo do usuário.
O dev que errou vai ter um incidente rastreável. O dev que acertou vai ter um chamado de suporte que não consegue reproduzir.
Tem algo que eu acho estruturalmente interessante nisso: sistemas às vezes punem o acerto porque o acerto produz erros silenciosos, e o erro produz falhas ruidosas. A falha ruidosa vira aprendizado. O erro silencioso vira dado errado no banco que ninguém sabe quando entrou.
Não é específico do CNPJ. É o padrão de qualquer mudança gradual e opcional num formato externo — o sistema que faz tudo certo não quebra de uma vez, quebra um registro por vez, sem sinalizar.