Alternativa para CPF (Usuários Estrangeiros) – javascript banco-de-dados modelagem

Pergunta:


Tenho um site onde controlamos os usuários pelo numero de CPF, acredito ser a melhor forma pois é um dado único, que todo mundo sabe e é checavel. Porem o cliente tem agora usuários estrangeiros que não tem CPF.

Como lidar com isso? Pelo que sei não é possível controlar número de passaporte. Não existe nada que seja igual ao CPF.

Mais detalhes:

Como chave primaria é usado um USERID. O CPF é o login no sistema. Quem acessa são vendedores de lojas que vendem o produto – e o site é uma “área do lojista” onde é feito promoções internas.

Pedir o CPF é um esforço de prevenir mais de um cadastro por pessoa já que o site cria campanhas onde o usuário pode receber prêmios por responder questionários.

Ex: uma das acoes feitas foi GANHE UM PAR DE INGRESSOS PARA ASSISTIR A FINAL DA COPA NO MARACANA. Ele responde o questionário com perguntas sobre o produto, técnica de vendas, etc.. e quem acertar mais ganha o premio. Cada um pode fazer 1x. Temos um banco de questões – o questionário pede 20, no banco tem 200 que são randomizadas. Mas de qualquer modo quanto mais cadastros um usuário tem, mais chances ele forjará para si.

Autor da pergunta DANIEL

Resposta :

TL;DR

CPF não é um bom candidato para chave primária de banco de dados e provavelmente não é ideal para um “controle”, seja lá o que isso signifique para o AP. Nesse caso uma chave substituta costuma ser uma opção melhor.

Vai precisar de um “código interno” para complementar, ou até substituir o CPF como identificação do cadastrado. Existem vários motivos para não usar CPF como “controle”. Em geral esse é um dado auxiliar.

Ou pode usar um dado um pouco melhor, talvez o e-mail, que não é perfeito também.

Um pouco de contexto teria ajudado dar uma solução mais específica.

Mitos sobre dados

Existem mitos sobre um monte de coisa que programadores acreditam. Existem até alguns sites que tentaram mostrar algumas destas inverdades que as pessoas acreditam. São coisas universais e só pegaram poucos assuntos. Veja que a quantidade de mitos em cada um é bem grande. A maioria os programadores desconhecem completamente quase todos os itens apresentados neles:

Algumas listas são melhores que outras. Provavelmente dá para ter um lista destas para praticamente qualquer campo que dê para colocar em um banco de dados. E as pessoas acreditam sempre que o caso delas é diferente. Mesmo que algumas das perguntas retóricas que faço abaixo possam ser respondidas com um sim, um dia pode mudar, certo?

Imagino que falta um link sobre documentos. A lista de mitos deve ser enorme.

Dados únicos, obrigatórios e estáveis

O primeiro mito é acreditar que documentos são únicos para pessoas, especialmente CPF. E embora pareça óbvio, achar que eles são universais.

A pergunta, se lida com cuidado, já mostra que o documento não é único como é afirmado. Se quer uma coisa única e já está admitindo que ele não é único, não serve para esse “controle”.

Há casos que dá para ter dado repetido e ter um controle, há casos que o dado não precisa ser uniforme e há controle. Mas não pode usar como chave primária ou algo que tenha requerimentos parecidos com o encontrado em chaves primárias.

Há uma definição clara que o cônjuge não pode ter um cadastro separado? Muitos casos duas pessoas usam o mesmo CPF nessa situação. E há casos de pessoas já separadas, mas por alguma razão particular ainda usam o mesmo CPF.

O mesmo pode ser dito de pessoas que possuem alguma incapacidade legal. Essas não podem ter cadastro neste sistema? Entre esses, estão os menores de 18 anos (é possível ter CPF, mas não obrigatório).

Pessoas que decidiriam por alguma razão que não querem ter um CPF, mesmo sendo obrigatório, não podem ser cadastradas?

Pessoas que são residentes estrangeiros ou turistas parece que pode. Estes últimos sequer precisam ter um passaporte em muitos casos. Eles precisam estar presentes no Brasil para se cadastrar? Vai saber se no país deles precisa ter algum documento oficial. E se tiver, como isto pode ser útil para seus sistema aqui? Não esqueçamos dos ilegais. Não quer contemplar eles no sistema?

Já pensou que é relativamente comum uma lei determinar uma forma diferente de usar um documento já existente? Teria um recadastro, um novo formato, um novo critério, etc. Você não tem controle sobre isto. Quer mesmo usar algo que você não tem controle das regras? E estou falando do CPF, nem precisa entrar em documentos de outros países.

E pela descrição parece que a própria regra do sistema pode mudar. Não é melhor usar algo mais estável como “controle”?

Possíveis soluções

Vale a pena controlar vários tipos de documento? Já imaginou o trabalho que isso dá? E que pode trazer problema? Que a experiência do usuário pode ser prejudicada por conta disso?

Me parece que nem mesmo o CPF deveria ser usado. Se realmente não é obrigatório ter o CPF, não o torne obrigatório por “vontade do sistema”.

Outro documento é bom? Duvido. Mas depende do requisito do sistema. Normalmente um documento de identificação deve ser informação acessória.

  • O endereço de e-mail é bom para isto? Polêmico. Até pode usar se o requisito do cadastro for ter um e-mail, normalmente é um requisito artificial que pode ser evitado. Há quem compartilhe o e-mail. As pessoas trocam/perdem acesso do seu e-mail. Se é algo puramente na internet, pode ser uma opção, ainda que tenha restrições ao seu uso. É o mais usado neste contexto, a despeito dos problemas possíveis, alguns que nem vou listar.

  • Um código interno é uma opção. Seja para todos, seja para os casos excepcionais onde o CPF não está disponível. Nem sempre podemos resolver bem todos os problemas. O código não precisa ser um número, pode ser montado do jeito que quiser, até mesmo permitido que o usuário crie um. A maior desvantagem disto é que o usuário terá que saber dele sempre. Então é melhor deixar ele escolher algo que ele lembre, e de preferência que seja único.

  • Muitas vezes o nome da pessoa é a melhor solução para achar o usuário. Depende de onde será usado. Normalmente não em um site. A repetição é muito comum. Outros problemas não são graves quanto parecem, mas eles existem.

Outras soluções podem ser possíveis dependendo do contexto onde será usado. Se a pergunta tivesse mais contexto, então seria possível cravar uma solução mais específica.

Todo país que se preze tem ao menos um controle de estrangeiros. No Brasil o controle é feito pela Polícia Federal. O documento de identificação de um estrangeiro é a Cédula de Identidade de Estrangeiro (CIE), antigo “Registro nacional de estrangeiros“, o qual possui uma função mais específica no controle de estrangeiros.

Alternativamente pode controlar pela identificação oficial do país de origem do estrangeiro, porém, imagine como implementar isso para mais de 200 países e manter tudo isso atualizado e íntegro. Por isso é inviável.

Quando falamos em estrangeiros, há classficações diversas como, residente permanente, porém não naturalizado como brasileiro. Há o residente provisório cuja classificação ramifica-se para turismo, trabalho, intercâmbio, bolsista, missão (voluntários de ONGs, NPOs, Governos estrangeiros, etc), dentre outros. Nessa lista entra também refugiados, expatriados, etc.

Por isso, procure manter a identificação por meio de documentos que sejam “controláveis” dentro da jurisdição da base de dados, no seu caso, o Brasil. Também é válido controlar pelo passaporte como um auxílio, mas não utilize o passaporte como identificação pois um estrangeiro também pode ser um ilegal, um refugiado, um expatriado ou um apátrida.

Depende do que significa “controlar o usuário”, depende dos requisitos de negócio do cliente.

O CPF do usuário é útil para os negócios do cliente ou você só precisa disso por razões técnicas (identificação única de registro na base de dados, por exemplo)?

O negócio do cliente não exige o CPF

Se o negócio do cliente não exige, você não deveria solicitar documentos ao usuário. Brasileiros não gostam muito de compartilhar seus documentos se não perceberem o motivo ou se o benefício do serviço prestado por quem está pedindo o documento não for muito relevante.

Se você precisa apenas de um identificador do usuário para fins de login, pedir um email é melhor do que pedir CPF. Lembre-se que pedir o CPF não prova que o usuário é quem diz ser (eu posso usar o CPF de outra pessoa) e se você não está usando nenhum serviço para bater o CPF com o nome, também não está tendo garantia nenhuma.

Pedir um nome de usuário é ruim porque o usuário pode ter que inventar um na hora e pode ter dificuldade pra lembrar depois.

O cliente precisa do CPF

Se o negócio do cliente exige o CPF, é o cliente quem vai informar qual documento alternativo vai servir para ele, e se é necessário um documento alternativo.

Se não é necessário um documento alternativo, você pode gerar um código para o usuário estrangeiro. Neste caso o sistema terá que oferecer duas alternativas de login: o CPF e o tal código gerado. Talvez seja melhor, em vez disso, oferecer as alternativas de login por CPF ou email.

Quanto à chave primária no banco, mesmo que o CPF seja exigido pelo negócio, considere usar uma surrogate key (um número gerado automaticamente) e um índice único para a chave primária natural (no caso, o CPF).

É comum as mudanças nos requisitos de negócio provocarem mudanças na chave primária natural da entidade; usar surrogate key dá mais flexibilidade para receber estas mudanças de requisito com menos esforço de mudança da base de dados.

CPF como login

Os detalhes adicionados à pergunta demonstram a utilidade do CPF para o negócio. E quanto a usá-lo como login?

Várias empresas usam o CPF como login. Meu banco e minha empresa de internet, por exemplo, utilizam.

Não sei quanto à minha empresa de internet, mas o meu banco abre conta para estrangeiros, os quais obviamente não possuem CPF. Aí é que entra um esforço a mais no tratamento do login: o site do banco também admite login pelo número da conta, além do login por CPF.

Como eu já mencionei antes, você pode ter mais de uma opção de login, e é o que o meu banco faz. Você pode abrir a página de login com uma opção primária e oferecer um botão para o usuário decidir fazer login de outra forma; ou pode tratar de maneira transparente, aceitando mais de um tipo de login no mesmo campo. Pode ser que seja viável identificar o tipo de login que está sendo usado (CPF/Documento estrangeiro, Código/Número de conta, Email…) e daí executar a devida lógica no servidor.

Nem todos os usuários possuem CPF

No seu caso específico, uma parte dos usuários não possui CPF porque não são brasileiros, e não possuem nenhum documento padrão brasileiro porque estão em outro país.

Neste caso, você pode pesquisar algum documento equivalente ao nosso CPF em cada país que o negócio do cliente atende.

Quando o usuário estiver se cadastrando, ele deve indicar seu país, e então o sistema exige o documento específico. Quando o país dispuser de um algoritmo para validação deste documento, você pode implementá-lo (do mesmo jeito que decerto você faz com o CPF).

No momento do login, o sistema não precisa dizer “entre com o seu CPF”, ele pode dizer simplesmente “login” e dar alguma dica de que o login é o documento do usuário.

Aceitando outros documentos que não CPF, o cliente aumenta a brecha para os usuários fazerem mais de um cadastro. Pelo que eu entendi, o único problema disso são as campanhas onde o usuário pode aumentar suas chances de ganhar se tiver mais de um cadastro. Já que pedir um documento, no seu caso, é apenas uma burocracia para tentar evitar este tipo de fralde, o que o cliente pode fazer é aumentar ainda um pouco mais a burocracia para diminuir os efeitos do aumento na brecha, como por exemplo anunciar na campanha e solicitar cópia do documento por email para proceder a entrega do prêmio, e só entregar no país declarado pelo usuário no seu cadastro.

Por fim, repito que a melhor solução aparece com a participação ativa do cliente, que deve ajudar a resolver os problemas e a decisão final pertence a ele.

Acredito que para o seu caso, que já tenha uma aplicação pronta, baseada no modelo de CPF, não adianta entrar na teoria de qual o melhor e mais seguro tipo de identificador para usuários.

Se fosse um sistema meu, que utiliza CPF e de repente precisasse receber usuário sem CPF, eu escolheria perguntar para o usuário novo, no ato do cadastro, se o mesmo é brasileiro ou não.

Caso a resposta fosse negativa, ele seria enviado para a tela de cadastro, onde a forma de registro e entrada seria o endereço de e-mail. E claro, isso não invalida a possibilidade do cadastro conter campos que possam ser usados para checagem futura, como número de passaporte, RG estrangeira etc. A maioria dos países emite algum tipo de documento de seguridade social, que aqui no Brasil, funciona como o CPF.

Fonte

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *