Acessar artigos

Persons e Peoples

O sistema TagCenter possui dois conceitos que são fundamentais para sua compreensão, estes
conceitos são "persons" e "peoples".

  • Persons: são os contatos ou leads (uma possível oportunidade de negócio) que chegaram ao sistema com possíveis dados incompletos ou errados. Uma "person" é vinculada a um projeto.
  • Peoples: são a versão das pessoas que passaram por um processo de enriquecimento de dados, que busca validar suas informações reais e trazer mais dados para que o lead possa ser convertido com facilidade. Uma "people" não está vinculada a um projeto.

A chave primária da relação entre estas duas entidades é o endereço de email utilizado
ao se cadastrar no sistema. Sendo que várias "persons" podem levar à mesma
"people" (é uma relação N:1).

Existe uma trigger no banco de dados que cria essa correlação de forma automatizada.
Isso aborda a integridade do banco de dados atrelando o people_id ao person_id.

CREATE OR REPLACE FUNCTION copy_person_to_people() RETURNS TRIGGER AS
$BODY$
DECLARE
people_id bigint;
BEGIN
IF NOT EXISTS (SELECT 1 FROM tagchat.peoples p WHERE p.email = NEW.email)
AND NEW.email IS NOT NULL THEN
INSERT INTO
tagchat.peoples(email, phone_number)
VALUES(NEW.email, NEW.phone_number)
RETURNING id INTO people_id;
new.people_id := people_id;
ELSE
people_id := (SELECT p.id FROM tagchat.peoples p WHERE p.email =
NEW.email);
new.people_id := people_id;
END IF;
RETURN NEW;
END;
$BODY$

language plpgsql;

Chamando o enriquecimento

Quando uma nova "person" é cadastrada no sistema, a API é chamada por uma rota e então gera uma mensagem Confluent Kafka para o Enrichment Node Manager que controla as mensagens enviadas para os erichment_nodes. Seguindo a estrutura geral mostrada abaixo.

Nós de enriquecimento de dados

O sistema possui os seguintes nós possíveis para enriquecimento de dados: basic-data, geodata, enterprise-scrapper, whatsapp, linkedin, emergencial-aid.
Esses nós são gerenciados pelo nosso Enrichment Manager que decide quando eles devem ser chamados e em que ordem. E na tabela Peoples estão os controladores de qual enriquecimento e quando essa "person" recebeu.
Cada nó é responsável por criar atividades, anotações e logs que são usados no próprio sistema.

Github: Enrichment Nodes Manager

Basic-Data

  • Como funciona: este nó faz uma chamada de API para a API do Big Boost e salva os dados em sua tabela específica.
  • Pré-requisitos: para chamar a api é necessário ter o email da pessoa ou o cpf.
  • Dados:
Nome da colunaTipo de dadoDescrição
namevarcharnome completo
common_namevarcharnome comum
gendervarchargênero
birth_datetimestampdata em que nasceu
ageintegeridade da "people"
birth_countryvarcharo país que nasceu
mother_namevarcharo nome da mãe
tax_id_numbervarcharo número do documento (cpf)
tax_id_originvarchara origem do documento
tax_id_countryvarcharo país em que o documento foi originado
tax_id_fiscal_regionvarcharo estado em que o documento foi originado
has_obit_indicationbooleanse a pessoa tem indicação de obito ou não

Github: Node Basic Data

GeoData

  • Como Funciona: este nó utiliza informações do banco de dados do IBGE para obter dados sobre a cidade que as pessoas vivem.
  • Pré-requisitos: o endereço de onde as pessoas moram, incluindo o nome da cidade e Estado.
  • Dados:
Nome da colunaTipo de dadoDescrição
macroregionvarchara macrorregião da pessoa
distance_capitalvarchara distância em km da cidade da pessoa até a capital do estado
gentilicvarcharcomo o povo daquela cidade é chamado
pibvarcharo PIB per capita dessa cidade
idhvarcharo IDH daquela cidade

Github: Node GeoData

Enterprise-Scrapper

  • Como Funciona: este nó é um scrapper do site Consulta Sócio e vai obter os dados da empresa (e do empreendedor) com base no nome completo das pessoas
  • Pré-requisitos: para obter a url correta no site é necessário ter o nome completo das pessoas, então este nó é mais eficaz após o enriquecimento de dados básicos.
  • Dados:

Entrepreneur:

Nome da colunaTipo de dadoDescrição
entrepreneur_sincevarcharo dia em que o primeiro empreendimento da pessoa
foi aberto
number_of_enterprisesintegero número de empresas que a pessoa tem
match_cpfbooleanse o cpf do basic_data corresponde ao do site
partnersarray of textos nomes dos sócios da pessoa

Enterprises:

Nome da colunaTipo de dadoDescrição
entrepreneur_entry_datevarcharo dia em que o empreendedor ingressou na empresa
cnpjvarchardocumento principal da empresa
company_namevarcharo nome da empresa
fantasy_namevarcharo nome fantasia da empresa
register_statusvarchara origem do documento
share_capitaldoubleo valor do capital quando a empresa abriu
economic_activityvarcharem qual ramo econômico a empresa opera
legal_naturevarchara natureza jurídica da empresa
revenuevarchara receita da empresa
sizevarcharo tamanho da empresa

Github: Node Enterprise Scrapper

Linkedin

  • Como funciona: este nó é um scrapper e está obtendo a url do perfil no Linkedin através do e-mail em outro scrapper do Outlook.
  • Pré-requisitos: ele precisa da url do perfil do linkedin ou do e-mail para poder ser usado no scrapper Outlook.
  • Dados:

Linkedin:

Nome da colunaTipo de dadoDescrição
namevarcharo nome da pessoa no linkedin
biovarchara bio do perfil do linkedin
descriptionvarchara descrição do perfil do linkedin
locationvarchara localização do perfil do linkedin

Educations:

Nome da colunaTipo de dadoDescrição
degree_namevarcharo nome da graduação
study_fieldvarcharo campo de estudo
school_namevarchara entidade certificadora

Experiences:

Nome da colunaTipo de dadoDescrição
titlevarcharo cargo exercido
companyvarchara empresa dessa experiência
descriptionvarchardescrição dessa experiência

Skills:

Nome da colunaTipo de dadoDescrição
titlevarcharo nome da habilidade

Github: Node Linkedin Scrapper

Whatsapp

  • Como funciona: este nó é um scrapper da página do whatsapp e tenta validar um número de whatsapp.
  • Pré-requisitos: precisa do número de telefone da pessoa
  • Dados:
Nome da colunaTipo de dadoDescrição
whatsapp_verifiedbooleanse o telefone dessa pessoa é um whatsapp válido
whatsapp_profilevarcharuma url que leva para a foto do perfil do whatsapp

Github: Node Whatsapp Validate

Emergencial Aid

  • Como funciona: este nó é um scrapper da página auxilio emergencial.
  • Pré-requisitos: para obter a url correta no site é necessário ter o nome completo ou cpf das pessoas, então este nó é mais eficaz após o enriquecimento de basic_data.
  • Dados:
Nome da colunaTipo de dadoDescrição
namevarcharo nome completo da pessoa no site
match_cpfbooleanse o cpf do basic_data corresponde ao do site
nisvarcharo documento nis
datajsonos dados completos que o scrapper encontrou

Github: Node Emergencial Aid Scrapper

Comunicação entre os nós

Existe um processo de comunicação constante entre o Nodes Manager e os nós
em sí, isso acontece porque alguns nós já terão todas as informações, estes precisam executar enquanto outros serão dependentes de outros nós para terminar a execução.

Estrutura do banco de dados

Esta é a estrutura geral do banco de dados. Há uma tabela principal chamada "Peoples" e as outras tabelas satélites com os dados enriquecidos, todas possuem uma chave estrangeira.
Observe que a estrutura abaixo é uma abstração dessas tabelas, usando um único
campo chamado data para representar todas as suas colunas. Também note que a tabela enrichment_log armazena todo processo que aconteceu com um "people", independentemente de ter sido sucesso ou fracasso.

crosslistmenu-circle