Screening do quadro societário
Screening do quadro societário
Quando o flow tem um módulo de quadro societário (cnpj_socios, cnpj_participacoes ou cnpj_receita), cada sócio que veio na consulta é conferido contra as mesmas listas do módulo pep_sancoes. Não é um módulo novo, não entra no flow e não custa nada a mais: os sócios já vinham dentro da consulta que você já paga, e o cruzamento roda na nossa base. O resultado sai no partner_screening, dentro do data do próprio módulo que trouxe o quadro, ao lado de company.
ubo_profundo), que percorre nível a nível até as pessoas naturais e é cobrado por empresa subida, com teto definido por você.Cobertura deste enriquecimento, e nada além dela: um nível do quadro societário, com o sócio conferido por documento (CPF ou CNPJ, inclusive o CPF mascarado que a Receita publica) e por nome. Cadeia de vários níveis e participação indireta são o produto do módulo Cadeia societária, que você liga no flow quando precisa deles. Continuam fora de qualquer um dos dois, e não os anunciamos: controle por acordo de acionistas, sócio no exterior que não publica CNPJ e pessoa que controla sem constar do quadro. O percentual de participação só existe quando o flow comprou cnpj_participacoes: sem ele, nenhuma regra de 25% pode ser calculada, e o campo sai null em vez de zero. Acima de 50 sócios o excedente sai declarado em partners_truncated, nunca em silêncio.
O bloco ubo_coverage existe para essa honestidade ser legível por código, e não só por quem lê esta página: chain_complete só é true quando todo sócio do quadro é pessoa natural identificada, e unresolved_legal_entities conta os ramos que ficaram em aberto. Se o seu processo exige beneficiário final, é esse par que diz quando a análise humana ainda precisa continuar.
approved para review, e só no caso de sanção forte casada por documento. Semelhança de nome nunca move a decisão: o quadro societário não publica data de nascimento, então o desempate que existe para o titular não existe para o sócio, e homônimo é o caso comum. Nunca denied automático.Se uma lista nossa estiver vencida, o bloco sai unavailable com dataset_stale e cada sócio marcado como indeterminado: nós não afirmamos "nada consta" sobre um quadro que não conseguimos conferir, e esse caso não muda a decisão. O mesmo bloco, com os mesmos sócios indeterminados, sai com no_coverage quando nenhuma lista do módulo está disponível e com critical_source_disabled quando uma lista que a resposta não pode dispensar está fora do ar. São três motivos para a mesma regra: um veredito sobre o quadro só vale se alguma lista tiver sido de fato consultada. E quando uma lista específica não entrou na consulta, ela aparece no aggregates.by_list de cada sócio com null em vez de sumir do objeto, exatamente como no bloco do titular: "não foi olhada" nunca se parece com "olhada e sem resultado" no seu código. O mesmo vale para sócio sem nome e sem documento na fonte. O documento do sócio não viaja dentro de partner_screening: ele já está em company.socios, no mesmo check, sob a mesma cifra e o mesmo direito de exclusão.
// cnpj_socios: quadro conferido, um sócio sancionado (evidência; só vai a review se você ligar)
{ "module": "cnpj_socios", "passed": true, "outcome": "approved", "score": 95,
"data": {
"company": { "cnpj": "46157128000164", "razao_social": "EXEMPLO LTDA", "socios": [ /* ... */ ] },
"partner_screening": {
"status": "flagged", "reason": "partner_sanction_document", "review": true,
"partners_total": 2, "partners_screened": 2, "partners_flagged": 1,
"partners_indeterminate": 0, "partners_truncated": false,
"partners": [
{ "name": "JOSE CARLOS DA SILVA", "qualification": "Sócio-Administrador",
"entity_type": "person", "percentual": null, "matchable": true,
"status": "flagged", "reason": "sanction_document", "matched_by": "document",
"hits": [ { "source": "cgu_ceis", "list": "CEIS", "matched_by": "document",
"strong": true, "similarity": 1, "entry_ref": "cgu_ceis:1182" } ] },
{ "name": "SOCIO LIMPO", "qualification": "Sócio", "entity_type": "person",
"status": "clear", "reason": "clean", "matched_by": "none", "hits": [] }
],
// o que dá e o que NÃO dá para afirmar sobre beneficiario final
"ubo_coverage": { "level": 1, "chain_complete": true, "percentual_available": false,
"unresolved_legal_entities": 0, "presumption_threshold_pct": 25,
"candidates_over_threshold": null },
"model_version": "partner-screening-v1" } } }
// cnpj_socios: sócio pessoa jurídica no quadro (a cadeia NÃO se fecha, e a resposta diz isso)
{ "module": "cnpj_socios", "passed": true, "outcome": "approved", "score": 95,
"data": { "partner_screening": {
"status": "clear", "reason": "clean", "review": false,
"ubo_coverage": { "level": 1, "chain_complete": false, "unresolved_legal_entities": 1 } } } }
// cnpj_socios: lista nossa vencida (indeterminado explícito, nunca "limpo")
{ "module": "cnpj_socios", "passed": true, "outcome": "approved", "score": 95,
"data": { "partner_screening": {
"status": "unavailable", "reason": "dataset_stale", "review": false,
"stale_sources": ["cgu_ceis"],
"partners": [ { "name": "JOSE CARLOS DA SILVA", "status": "indeterminate",
"reason": "dataset_stale", "hits": [] } ] } } }
// cnpj_socios: nenhuma lista do modulo disponivel (mesmo bloco, outro motivo).
// disabled_sources traz o catalogo INTEIRO do modulo neste caso; o exemplo mostra so duas entradas.
{ "module": "cnpj_socios", "passed": true, "outcome": "approved", "score": 95,
"data": { "partner_screening": {
"status": "unavailable", "reason": "no_coverage", "review": false,
"disabled_sources": ["cgu_ceis", "cgu_pep"],
"partners": [ { "name": "JOSE CARLOS DA SILVA", "status": "indeterminate",
"reason": "no_coverage", "hits": [] } ] } } }Pronto para integrar? A chave de sandbox sai no painel, logo depois do cadastro. Criar conta grátis