Screening do quadro societário
Quando o flow tem um módulo de quadro societário (cnpj_partners, cnpj_shareholdings ou cnpj_realtime), cada sócio que veio na consulta é conferido contra as mesmas listas do módulo pep_sanctions. 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.
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_shareholdings: 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.
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.