Mídia adversa
Mídia adversa
O módulo midia_adversa confere o nome lido do documento contra um corpus aberto de notícias (negative news) mantido e atualizado por nós, construído sobre o GDELT Project (dados do Global Knowledge Graph, uso comercial livre, com atribuição). Ele exige Verificação de Identidade + Face Match + Liveness no mesmo flow: o nome consultado vem do documento apresentado por quem está vivo na frente da câmera, nunca de um nome digitado. O widget não ganha nenhum passo novo.
review com a evidência no webhook (fonte, data e link), para a sua análise humana decidir. Nunca a denied automático: uma coincidência de nome não pode destruir o cadastro de um inocente.O grau de confiança do casamento vem sempre declarado. Cada hit carrega name_match (strong ou possible) e a similarity de 0 a 100; a resposta agrega o grau mais forte no topo. Um hit forte vem com a evidência completa: a fonte, a data de publicação e o link da notícia, que é o que o seu revisor abre para julgar. Um possível homônimo (zona cinzenta) apenas sinaliza: sai o grau, a similaridade e uma referência opaca, sem link, sem veículo e sem data, porque provável terceiro não ganha dossiê. Divergência de data de nascimento, quando existe nos dois lados, rebaixa o grau e fica marcada em birth_date_mismatch, nunca esconde o hit.
A lista de hits tem teto de 20, e o corte vem declarado. Homônimo comum produz dezenas de notícias, e um payload sem limite viraria incidente de custo e de leitura do seu lado. Passando de 20, hits sai cortado e hits_truncated vem true. O que continua verdadeiro no corte: hits_total declara o número real de hits, aggregates é calculado sobre o conjunto completo, e a ordenação é determinística antes do corte (hit forte na frente do possível, depois maior similaridade). Sem essa ordem, um homônimo com 50 hits fracos empurraria para fora da lista justamente o único hit forte, que é o que o seu revisor precisa ver primeiro.
Cada resposta carimba a fonte que a sustentou em coverage e a idade da base em dataset_versions. Se a base estiver vencida, ou ainda sem carga, o módulo devolve pending com dataset_stale e a verificação vai para review: o resultado é indeterminado, nós não afirmamos "nada consta" sobre base que não conseguimos atualizar, e esse caso não é cobrado.
// midia_adversa: nada consta (base fresca)
{ "module": "midia_adversa", "passed": true, "outcome": "approved", "score": 95,
"data": { "has_adverse_media": false, "flagged": false, "name_match": "none", "reason": "clear",
"hits": [], "hits_total": 0, "hits_truncated": false,
"aggregates": { "has_adverse_media": false, "possible_matches": 0, "strongest_match": null },
"coverage": ["gdelt_gkg"], "coverage_degraded": [],
"dataset_versions": { "gdelt_gkg": { "ingested_at": "2026-08-27T03:00:00Z", "age_hours": 4,
"stale": false, "disabled": false } },
"name_source": "ocr" } }
// midia_adversa: hit FORTE -> review humano com a evidência (fonte + data + link)
{ "module": "midia_adversa", "passed": false, "outcome": "failed", "score": 40,
"data": { "has_adverse_media": true, "flagged": true, "name_match": "strong",
"reason": "adverse_media_strong",
"hits": [ { "source": "gdelt_gkg", "name_match": "strong", "similarity": 94,
"url": "https://noticia.example.com/materia",
"outlet": "noticia.example.com", "published_at": "2025-11-20",
"birth_date_mismatch": false, "entry_ref": "gdelt_gkg:e_7a31d2" } ],
"hits_total": 1,
"aggregates": { "has_adverse_media": true, "possible_matches": 0,
"strongest_match": "strong" } } }
// midia_adversa: possível homônimo -> aprova com sinalização, SEM link e SEM data (minimização)
{ "module": "midia_adversa", "passed": true, "outcome": "approved", "score": 70,
"data": { "has_adverse_media": false, "flagged": true, "name_match": "possible",
"reason": "possible_match",
"hits": [ { "source": "gdelt_gkg", "name_match": "possible", "similarity": 78,
"url": null, "outlet": null, "published_at": null,
"birth_date_mismatch": false, "entry_ref": "gdelt_gkg:e_2c19aa" } ],
"hits_total": 1 } }
// midia_adversa: base sem carga/vencida -> pending (indeterminado), review, e NÃO cobrado
{ "module": "midia_adversa", "passed": null, "outcome": "pending", "score": 0,
"data": { "reason": "dataset_stale", "coverage": [], "coverage_degraded": ["gdelt_gkg"] } }Em sandbox nada é consultado: o desfecho vem do sufixo do documento. 02 devolve um hit forte com a evidência completa, 33 um possível homônimo que aprova com sinalização e 01 o caminho de base vencida (pendente, indeterminado, não cobrado). Flows com este módulo não permitem renovação de sessão pelo widget: a renovação é sempre pelo seu servidor.
Pronto para integrar? A chave de sandbox sai no painel, logo depois do cadastro. Criar conta grátis