# Tabelas QL
Existem duas collections utilizadas para a geração do produto de qualificador de leads. Estas collections (equivalente à uma tabela em um banco relacional) encontram-se em um banco de dados não relacional, mongoDB, com endereço **sandbox-general.7xq04.mongodb.net**, no database **icarros-database**.
A collection qualificador_leads_hist contém todo o histórico de atualização, para todos os anunciantes do icarros. Já a collection qualificador_leads possui apenas os dados que deverão ser atualizados no site no dia atual, considerando apenas os anunciantes que estão com o produto contratado.
1. qualificador_leads_hist

- _id: hash(str([usuario, modelo_id, anunciante, date]]))
hash é uma função do python que identifica unicamente um objeto com um número inteiro.
- usuario: id do usuário
- modelo_id: id do modelo do carro
- date: data de atualização
- perfil: id do nível de interesse do usuário <usuario> no modelo <modelo_id>
- anunciante: id do anunciante
- top_interest: top interesses do usuário <usuario> nos últimos três meses, partindo da data <date>, para as seguintes características:
- ano do modelo
- cidade do anúncio
- modelo
- categoria
- classe
- marca
- km
- tempo: tempo para o processamento do perfil <perfil>
- afiniddade_estoque: lista de carros no estoque do anunciante <anunciante> que podem interessar o usuário <usuario>, ordenada por nível de interesse. Cada item da lista contém:
- versao: versão do carro
- modelo: modelo do carro
- rating: nível de interesse do usuário <usuario>
2. qualificador_leads

Os itens que já se encontram na collection qualificador_leads_hist são cópias, sendo assim possuem o mesmo significado.
- notificacao: Se houve mudança no perfil <perfil> desde a última atualizaação.
## Fluxo de atualização
### qualificador_leads_hist
- frequência: diária
- modo de atualização: append
- casos de atualização:
- O usuário <usuario> fez um primeiro lead para o modelo <modelo_id>, **em um anúncio do anunciante <anunciante>**.
- O usuário fez um detalhe ou tentativa de financiamento para o modelo <modelo_id>, em um anúncio do anunciante <anunciante>, sendo que já existia (<usuario>, <modelo_id>, <anunciante>) em algum documento (equivalente à uma linha em uma tabela de um banco de dados relacional) da collection qualificador_leads_hist.
### qualificador_leads
- frequência: diária
- modo de atualização: overwrite
- etapas:
1. Primeiro filtramos os dados (<_id>, <usuario>, <modelo_id>, <perfil>, <top_interest>, <anunciante> e <afinidade_estoque>) da collection qualificador_leads_hist que
- Estão na data de atualização
- Possuem anunciantes com o produto de qualificador de leads contratado
2. casos de atualização:
- Se é o primeiro lead do usuário <usuario> para o modelo <modelo_id> dentro de um anúncio do anunciante <anunciante>, então definimos <notificacao>=false.
Caso contrário:
- Se o perfil do usuário não se modificou da última atualização para a atual, então definimos <notificacao>=false.
Caso contrário:
- Definimos <notificacao>=true
- Se o perfil do usuário foi alterado para 1, modificamos esse perfil mapeando qual foi a mudança (ou 2 $\to$ 1, ou 3 $\to$ 1, ...). Além do mais, trocamos os valores de <top_interest> e <afinidade_estoque> para os valores da última atualização.
**Obs:** Esse caso merece esse processamento especial pois ele ocorre quando o usuário volta ter uma interação com o site depois de um tempo inativo.