Entrar

Cómo interpretar la respuesta del Screening

Manual para que una aplicación cliente interprete la respuesta del endpoint público POST /v1/screening, incluso cuando la consulta avanzada expande la red societaria mediante ownership_network.

Los textos presentados al usuario pueden ser localizados por la capa cliente. La documentación interactiva (/docs) es la referencia de tipos y campos; este manual explica la semántica y el orden de lectura.

La recomendación de la API apoya la decisión de compliance. No sustituye la política, las aprobaciones ni el análisis humano exigido por el cliente.

Orden seguro de lectura

Una respuesta larga no debe leerse como una lista única de coincidencias. El consumidor debe seguir esta secuencia:

  1. Confirmar si la respuesta es concluyente (status).
  2. Leer la decisión sobre el sujeto consultado directamente.
  3. Evaluar las coincidencias y la cobertura de las fuentes.
  4. Evaluar por separado la red societaria, cuando se solicite.
  5. Usar el dossier y la facturación como evidencia y trazabilidad.

1. ¿La respuesta es concluyente?

{
  "status": "COMPLETE",
  "billable": true,
  "warnings": [],
  "notices": []
}
CampoInterpretación
status: COMPLETELas etapas solicitadas se completaron.
status: PARTIALAl menos una fuente o etapa no se completó. La respuesta es inconclusa. No trate CLEAR como aprobación automática.
status: ERRORLa consulta no produjo una clasificación confiable. No tome una decisión de riesgo.
billableIndica si hubo cobro; no indica si el resultado es favorable.
warningsMensajes para lectura humana.
noticesLas mismas alertas en formato estructurado, con code, severity y message.

Ejemplo de respuesta que exige repetición o revisión, y no aprobación:

{
  "status": "PARTIAL",
  "billable": false,
  "notices": [
    {
      "code": "PARTIAL_SOURCE_FAILURE",
      "severity": "WARNING",
      "message": "Partial screening: at least one selected live source was unavailable. The result is not conclusive and was not charged. Run the screening again."
    }
  ]
}

2. Decisión sobre el sujeto consultado directamente

{
  "risk_level": "HIGH",
  "identity_class": "TRUE_MATCH",
  "recommendation": "REJECT",
  "summary": "One or more high-risk matches have confirmed identity. Blocking is recommended subject to your compliance policy."
}

Estos cuatro campos describen solamente a la persona o empresa enviada en el request. No deben asumirse como un resumen automático de la red de QSA.

CampoPregunta que responde
risk_level¿Qué tan grave es el riesgo efectivo encontrado?
identity_class¿Qué tan cierta es la coincidencia de identidad entre el registro y el sujeto consultado?
recommendation¿Qué acción sugiere la API al cliente?
summaryExplicación breve para una interfaz humana.

Clases de identidad

ValorUso práctico
TRUE_MATCHIdentidad confirmada por documento o evidencia fuerte.
POTENTIAL_MATCHEvidencia relevante, pero se requiere revisión humana.
WEAK_MATCHEvidencia insuficiente para una coincidencia accionable.
NO_MATCHNo se encontró ninguna coincidencia relevante.

Niveles de riesgo

ValorUso práctico
CLEARNo hay riesgo accionable dentro del alcance efectivamente consultado.
MEDIUMRequiere revisión; por ejemplo, un PEP confirmado o una coincidencia potencial de una fuente grave.
HIGHCoincidencia grave con identidad suficientemente confirmada.
ERRORNo hubo clasificación confiable.

Una política de integración típica es:

COMPLETE + CLEAR + NO_MATCH             -> continuar, respetando el alcance consultado
COMPLETE + MEDIUM o POTENTIAL_MATCH     -> revisión humana
COMPLETE + HIGH + TRUE_MATCH            -> bloquear o escalar según la política
PARTIAL o ERROR                         -> no aprobar automáticamente

El PEP es un caso aparte: requires_edd: true exige diligencia reforzada, pero la condición de PEP, por sí sola, no es motivo de bloqueo automático.

3. Coincidencias directas: hits

{
  "total_hits": 2,
  "actionable_hits_count": 2,
  "informational_hits_count": 3,
  "returned_hits_count": 2,
  "hits_truncated": false,
  "hits": [
    {
      "source": "OFAC_SDN",
      "category": "Financial Sanction",
      "name_similarity": 0.98,
      "identity_confidence": 1.0,
      "document_evidence": "EXACT_MATCH",
      "identity_class": "TRUE_MATCH",
      "risk_level": "HIGH",
      "requires_edd": true,
      "downgraded": false
    }
  ]
}
CampoCómo usarlo
hitsCoincidencias accionables que sustentan la decisión del sujeto principal.
total_hits / actionable_hits_countCoincidencias accionables encontradas antes del límite de tamaño de la respuesta.
returned_hits_countSiempre igual a hits.length.
informational_hitsCandidatos descartados o débiles; útiles para auditoría, no para bloqueo automático.
hits_truncatedSi es true, hits no contiene todas las coincidencias.
truncated_hits_by_sourceCantidad omitida por fuente.
categoryNaturaleza regulatoria del registro, por ejemplo sanción, PEP o insolvencia.
source_risk_levelGravedad original de la fuente.
risk_level en el hitGravedad efectiva tras considerar la identidad.
name_similaritySimilitud de nombre; no es prueba aislada de identidad.
identity_confidenceConfianza final de identidad.
document_evidenceCómo contribuyó el documento a la identificación.
downgradedLa confianza o el riesgo se redujo por la evidencia disponible.
requires_eddEl caso requiere diligencia reforzada (enhanced due diligence).

Nunca tome una decisión solo por name_similarity. Use identity_class, risk_level, document_evidence y el contexto de la fuente.

4. Cobertura de las fuentes: sources_checked

sources_checked es la prueba de qué fuentes fueron efectivamente consultadas y qué ocurrió en cada una.

{
  "sources_checked": {
    "OFAC_SDN": {
      "list_status": "AVAILABLE",
      "query_result": "MATCH",
      "risk_level": "HIGH",
      "hits": 1,
      "confirmed_hits": 1,
      "potential_hits": 0,
      "skip_reason": null
    },
    "PY_DNIT_RUC": {
      "list_status": "NOT_APPLICABLE",
      "query_result": "NOT_QUERIED",
      "hits": 0,
      "skip_reason": "COMPATIBLE_DOCUMENT_REQUIRED"
    }
  }
}

5. Solicitud de QSA

El QSA es un enriquecimiento interno devuelto por la misma llamada de Screening. Para solicitarlo, el consumidor agrega estos campos al cuerpo de POST /v1/screening:

{
  "name": "EMPRESA ALFA LTDA",
  "cnpj": "12345678000190",
  "groups": ["national", "sanctions"],
  "advanced": true,
  "ownership_depth": 3
}

ownership_depth puede ir de 1 a 8 y exige advanced: true más CPF o CNPJ. El QSA no se ejecuta en profundidad 0.

6. Qué representa un nivel de QSA

Un nivel es una ronda completa de expansión societaria, no una alternancia fija entre empresas y socios.

ProfundidadResultado esperado
0QSA no solicitado.
1Vínculos directos del sujeto consultado.
2Expansión de todas las personas y empresas nuevas encontradas en el nivel 1.
3Expansión de todas las entidades nuevas del nivel 2.
4 a 8Repetición de la misma regla para la ronda anterior.

Raíz CPF

Persona consultada
└── nivel 1: empresas en las que la persona figura como socia
    └── nivel 2: socios de esas empresas y empresas en las que participan
        └── nivel 3: expansión de las entidades nuevas del nivel 2

Raíz CNPJ

Empresa consultada (nivel 0)
├── nivel 1: sus socios
├── nivel 1: empresas en las que también participa
└── nivel 2: expansión de las personas y empresas nuevas del nivel 1
    └── nivel 3: expansión de las entidades nuevas del nivel 2

El nivel mide distancia en la expansión, no riesgo, participación societaria ni control. Una entidad de nivel 3 puede ser más grave que una de nivel 1, y viceversa.

7. Cómo leer una respuesta en varios niveles

{
  "ownership_network": {
    "status": "FOUND",
    "queried_cnpj_root": "12345678",
    "requested_depth": 3,
    "reached_depth": 3,
    "billable_depth": 3,
    "total_companies": 4,
    "companies": [
      {
        "cnpj_root": "12345678",
        "legal_name": "EMPRESA CONSULTADA LTDA",
        "level": 0,
        "partners": [
          {
            "level": 1,
            "name": "ANA EXEMPLO",
            "party_type": "PF",
            "role": "SOCIO-ADMINISTRADOR"
          }
        ]
      },
      {
        "cnpj_root": "87654321",
        "legal_name": "HOLDING ALFA LTDA",
        "level": 1,
        "originating_partner_name": "EMPRESA CONSULTADA LTDA",
        "screening": {
          "risk_level": "CLEAR",
          "identity_class": "NO_MATCH",
          "recommendation": "APPROVE"
        }
      },
      {
        "cnpj_root": "11223344",
        "legal_name": "BETA PARTICIPACOES LTDA",
        "level": 2,
        "originating_partner_name": "ANA EXEMPLO",
        "screening": {
          "risk_level": "MEDIUM",
          "identity_class": "TRUE_MATCH",
          "recommendation": "REVIEW",
          "actionable_hits_count": 1
        }
      },
      {
        "cnpj_root": "55667788",
        "legal_name": "GAMMA INVESTIMENTOS LTDA",
        "level": 3,
        "originating_partner_name": "BETA PARTICIPACOES LTDA",
        "screening": {
          "risk_level": "HIGH",
          "identity_class": "TRUE_MATCH",
          "recommendation": "REJECT",
          "actionable_hits_count": 1
        }
      }
    ]
  }
}

El cliente debe analizar cada company.screening y cada company.partners[].screening como una conclusión sobre esa entidad relacionada.

Resultado en una entidad relacionadaTratamiento recomendado
CLEAR + NO_MATCHNo hay coincidencia accionable en esa entidad, dentro del alcance derivado consultado.
MEDIUM, POTENTIAL_MATCH o requires_edd: trueSeñalar la red para revisión humana.
HIGH + TRUE_MATCHSeñalar riesgo alto en la red; bloquear, escalar o exigir aprobación según la política del cliente.
PARTIAL, ERROR, hits_truncated o aviso de límiteNo considerar completo el análisis de esa entidad ni el de la red.

En el ejemplo anterior, el resultado principal puede seguir siendo CLEAR, pero el cliente debe mostrar algo como:

Sujeto principal: sin coincidencia accionable.
Red societaria: riesgo alto encontrado en el nivel 3 en GAMMA INVESTIMENTOS LTDA.
Próxima acción: revisión de compliance de la red societaria.

Esto preserva la verdad del contrato: el riesgo directo y el riesgo de relación no son la misma afirmación.

Presentación recomendada

Agrupar la lista por level es más seguro que intentar dibujar un árbol jurídico exacto:

Red societaria — 3 de 3 niveles completados

Nivel 0
• EMPRESA CONSULTADA LTDA

Nivel 1 — vínculos directos
• ANA EXEMPLO — socia administradora
• HOLDING ALFA LTDA — sin coincidencia accionable

Nivel 2 — vínculos de los relacionados
• BETA PARTICIPAÇÕES LTDA — revisión necesaria

Nivel 3 — expansión adicional
• GAMMA INVESTIMENTOS LTDA — riesgo alto confirmado

companies es una lista plana. originating_partner_name indica a través de qué socio se encontró la empresa, pero el contrato no incluye un identificador de empresa matriz ni de arista. Por eso, nombres iguales pueden hacer ambiguo un árbol gráfico. La interfaz debe preferir la formulación "encontrada en el nivel X vía Y".

8. Completitud, límites y costo del QSA

{
  "ownership_network": {
    "requested_depth": 3,
    "reached_depth": 2,
    "warnings": ["The ownership entity limit was reached."],
    "derived_screening": {
      "entities_processed": 100,
      "unique_entities": 98,
      "relationships_found": 156,
      "entity_limit": 100,
      "interpol_excluded": true
    },
    "billing": {
      "base_groups": ["national", "sanctions"],
      "base_group_cost": 2,
      "billable_depth": 2,
      "ownership_tokens": 4,
      "interpol_excluded": true
    }
  }
}
CampoInterpretación
requested_depthProfundidad solicitada en el request.
reached_depthMayor ronda efectivamente alcanzada. Puede ser menor que la solicitada si no había vínculos nuevos.
warningsSi hay aviso de límite o indisponibilidad, la red no debe tratarse como completa.
billable_depthProfundidad efectivamente usada para la facturación.
derived_screeningMétricas del análisis de riesgo de las entidades relacionadas.
entities_processed / unique_entitiesVolumen procesado y volumen tras la deduplicación.
relationships_foundVínculos societarios encontrados.
entity_limitLímite operativo que protege contra redes excesivamente grandes.
interpol_excludedINTERPOL no participa del análisis derivado de QSA.
billing.ownership_tokensComponente de tokens de la expansión societaria.

Cuando el QSA se ejecuta, la profundidad facturable mínima es 1, incluso sin vínculos encontrados. El costo de expansión se basa en el costo de los grupos de fuentes y en la profundidad efectivamente facturable. Si el QSA no está disponible, la consulta principal puede continuar; en ese caso, trate el bloque societario como no disponible y siga los avisos y la facturación devueltos.

9. Dossier y trazabilidad de auditoría

dossier organiza las evidencias del sujeto principal para auditoría:

{
  "dossier": {
    "audit_trail": {
      "api_version": "v1",
      "timestamp_utc": "2026-08-04T12:15:18Z",
      "groups_checked": ["national", "sanctions"],
      "tokens_charged": 6
    },
    "decision": {
      "risk_level": "MEDIUM",
      "identity_class": "POTENTIAL_MATCH",
      "recommendation": "REVIEW"
    },
    "regulatory_taxonomy": {
      "by_category": {
        "Politically Exposed Person (PEP)": 1
      },
      "risk_by_category": {
        "Politically Exposed Person (PEP)": "MEDIUM"
      }
    },
    "proof_of_compliance": {
      "status": "RECORDED",
      "ledger_ref": "SCR-20260804-ABC123",
      "hash": "..."
    }
  }
}

El dossier no debe usarse para recalcular la decisión: es una presentación auditable de decision, detailed_hits, taxonomía y evidencia de facturación.

10. Resultado resumido para la interfaz del cliente

Una aplicación puede mostrar su propio resumen, siempre que preserve la respuesta original para auditoría:

{
  "screening_completeness": "COMPLETE",
  "direct_subject": {
    "risk": "CLEAR",
    "identity": "NO_MATCH",
    "recommendation": "APPROVE",
    "actionable_hits": 0
  },
  "ownership_network": {
    "status": "FOUND",
    "requested_depth": 3,
    "reached_depth": 3,
    "related_entities_with_actionable_hits": 2,
    "highest_related_risk": "HIGH"
  },
  "next_action": "MANUAL_REVIEW"
}

related_entities_with_actionable_hits, highest_related_risk y next_action son ejemplos de campos calculados por la aplicación cliente. No sustituyen los campos oficiales devueltos por la API.

11. Checklist de implementación

Vea funcionando

Las cinco llamadas más comunes — health, sources, balance, screening (con y sin coincidencia) y statement — corriendo en vivo, lado a lado, en la página Vea funcionando.

Solicitar acceso