Ontem mesmo eu enfrentei problemas desse tipo, como: Acentuação e problemas cidades grandes.
Se não me engano o máximo é 25 caracteres.
A questão da pontuação é tranquilo de se resolver, porém a ideia que eu tive em relação a cidade seria de pegar as primeiras letras, assim como você citou.
ex: Rio De Janeiro o algoritmo iria ver se passa de 25 caracteres e caso sim ele pegaria as primeiras letras de cada palavra fazendo um: RJ.
É uma ideia que pretendo ja subir nas futuras versoes.
Eu acho que você pode simplificar só verificando o tamanho e se inclui caracteres com acentos e disparar uma exceção com isso.
O resto, o programador se vira.
Eu nunca vi um banco usar esse dado, mas por vias das dúvidas, ele tá lá.
Outra coisa: o tipo da chave pix é omitido no payload final. Você usa ele para o que? Validar key
? Ou tem outra utilidade?