Problema
Necessidade de um identificador universal único (UUID) para cada entidade representada nos datasets do Brasil.IO. Entidades podem ser: empresas, pessoas, candidaturas etc. A falta de um UUID traz problemas como:
- A necessidade de filtrar por vários campos ao mesmo tempo (que mudam de dataset para dataset)
- Dificuldade de buscar em mais de um dataset
- Dificuldade de gerar o ID offline para consultas externas
- dentre outras
Atualmente utilizamos o dataset documentos-brasil para fazer essa desambiguação, porém ele não resolve completamente o problema, além de ser de difícil manutenção.
Solução
UUID versão 5 (hash SHA1, usando o namespace OID ou o URL -- ainda a definir), com prefixos de nomes estabelecidos pelo Brasil.IO (ou URLs diretamente), que controlarão a versão e o tipo de entidade.
Referências:
Exemplo em Python (URL)
import uuid
# Pessoa jurídica: 8 primeiros dígitos do CNPJ
# company
banco_do_brasil = uuid.uuid5(uuid.NAMESPACE_URL, "https://id.brasil.io/v1/company/00000000")
# Pessoa jurídica (matriz/filial): 14 dígitos do CNPJ
# company-branch
banco_do_brasil_filial_cajazeiras = uuid.uuid5(uuid.NAMESPACE_URL, "https://id.brasil.io/v1/company-branch/00000000009903")
# person
# Pessoa física: 6 dígitos do CPF ***111111** + nome completo em maiúsculas sem acento (slugified)
pessoa = uuid.uuid5(uuid.NAMESPACE_URL, "https://id.brasil.io/v1/person/111111-JOSE-CARLOS-DA-SILVA")
Nota: talvez o primeiro nome + 6 dígitos não sejam suficientes para a unicidade desse objeto (exemplo: 5,7 milhões de brasileiros possuem o nome José e não temos como garantir que os CPFs deles estarão espalhados uniformemente).
Exemplo em Python (OID)
import uuid
# Pessoa jurídica: 8 primeiros dígitos do CNPJ
# company
banco_do_brasil = uuid.uuid5(uuid.NAMESPACE_OID, "brasil.io/v1/company/00000000")
# Pessoa jurídica (matriz/filial): 14 dígitos do CNPJ
# company-branch
banco_do_brasil_filial_cajazeiras = uuid.uuid5(uuid.NAMESPACE_OID, "brasil.io/v1/company-branch/00000000009903")
# person
# Pessoa física: 6 dígitos do CPF ***111111** + nome completo em maiúsculas sem acento (slugified)
pessoa = uuid.uuid5(uuid.NAMESPACE_OID, "brasil.io/v1/person/111111-JOSE-CARLOS-DA-SILVA")
Implementação
Além do UUID, poderíamos armazenar um título que representa aquele objeto. O título poderia ser o nome da entidade (ou uma categoria) + algum identificador do objeto (não necessariamente único), por exemplo. Exemplos possíveis:
- Candidato a deputado Fulano de Tal
- Notebook SN: XXXXX
- Pessoa: Cicrano da Silva
Na base de dados poderíamos ter os seguintes campos:
- UUID
- Name (brasil.io/versao/entidade/id)
- Versão do UUID
- Entidade
- ID
- Título
- Texto (para FTS)
Problema
Necessidade de um identificador universal único (UUID) para cada entidade representada nos datasets do Brasil.IO. Entidades podem ser: empresas, pessoas, candidaturas etc. A falta de um UUID traz problemas como:
Atualmente utilizamos o dataset documentos-brasil para fazer essa desambiguação, porém ele não resolve completamente o problema, além de ser de difícil manutenção.
Solução
UUID versão 5 (hash SHA1, usando o namespace OID ou o URL -- ainda a definir), com prefixos de nomes estabelecidos pelo Brasil.IO (ou URLs diretamente), que controlarão a versão e o tipo de entidade.
Referências:
Exemplo em Python (URL)
Exemplo em Python (OID)
Implementação
Além do UUID, poderíamos armazenar um título que representa aquele objeto. O título poderia ser o nome da entidade (ou uma categoria) + algum identificador do objeto (não necessariamente único), por exemplo. Exemplos possíveis:
Na base de dados poderíamos ter os seguintes campos: