Dispositions
When monitoring screens your entities it produces PEP and sanction matches. A disposition is the decision you record on a match: that it's a true match, or a false one. The dispositionScreeningMatches query returns those matches with their disposition status, so you can pull the ones that still need dispositioning or audit the ones you've already handled.
Each node is anchored on the screened entity — the entity that
actually carries the hit. entityId and entityKind identify it (a
company, a private person, or a business person), and its pepInfo /
sanctionInfo hold the matched records — the same PepInfo /
SanctionInfo you get elsewhere in the API, each null when the entity
has no hit of that kind. The screening is intrinsic to the entity, so
it lives on the node, not per monitored entity. The disposition trail
lives on each hit (hits.dispositions / sanctions.dispositions).
screenings ties the entity back to each monitored portfolio entity it
surfaces under: for a hit on the monitored entity itself there is one
entry whose monitoredEntity is the screened entity itself and whose
relationsToMonitoredEntity is null; for a hit found through a related
entity (say a company's beneficial owner) each entry pairs the monitored
entity with the relation. A beneficial owner who is a PEP under three of
your companies is therefore one node with three screenings.
This requires the Monitoring feature. To add entities to monitoring and handle change alerts, see the Monitoring Alerts example.
Fetch matches that need dispositioning
Filter on status: [UNVERIFIED] to get the worklist of matches
nobody has dispositioned yet. It covers companies and private
persons, and both PEP and sanction matches:
query Worklist {
dispositionScreeningMatches(
where: { status: [UNVERIFIED] }
pageInfo: { size: 50, offset: 0 }
) {
edges {
node {
entityId
entityKind
pepInfo {
hits { name pep rca confirmedMatch }
}
sanctionInfo {
sanctions { sanctionedBy program confirmedMatch }
}
screenings {
monitoredEntity {
... on Company { name }
... on PrivatePerson { name }
}
# null when the hit is on the monitored entity itself.
relationsToMonitoredEntity
}
}
}
pageInfo {
totalSize
nextPageOffset
}
}
}Only PEP matches
Add kind: [PEP] to list only the PEP matches still waiting on a
decision. A company's PEP match is found through a related person, so
the node is anchored on that person (entityKind: BUSINESS_PERSON) and
each screenings entry points back to the company with
relationsToMonitoredEntity describing the link:
query UndispositionedPeps {
dispositionScreeningMatches(
where: { kind: [PEP], status: [UNVERIFIED] }
pageInfo: { size: 50, offset: 0 }
) {
edges {
node {
entityId
entityKind
pepInfo {
hits { name pep rca confirmedMatch }
}
screenings {
monitoredEntity {
... on Company { name }
... on PrivatePerson { name }
}
# How the screened person is linked to the monitored company
# (e.g. an officer or beneficial owner). Null when the match
# is on the monitored entity itself.
relationsToMonitoredEntity
}
}
}
pageInfo {
totalSize
nextPageOffset
}
}
}Only sanction matches
Use kind: [SANCTIONS] for the sanction worklist. A sanction can sit
on a related company too — for example a sanctioned subsidiary of a
monitored company. That node is anchored on the related company
(entityKind: COMPANY), and screenings points back to the
monitored company with the ownership relation:
query UndispositionedSanctions {
dispositionScreeningMatches(
where: { kind: [SANCTIONS], status: [UNVERIFIED] }
pageInfo: { size: 50, offset: 0 }
) {
edges {
node {
entityId
entityKind
sanctionInfo {
sanctions { sanctionedBy program sanctionedSince confirmedMatch }
}
screenings {
monitoredEntity {
... on Company { name }
... on PrivatePerson { name }
}
# e.g. [OWNERSHIP] when the sanctioned entity is a subsidiary
# of the monitored company; null on a hit on the entity itself.
relationsToMonitoredEntity
}
}
}
pageInfo {
totalSize
nextPageOffset
}
}
}You can also narrow to one screened entity kind with entityKind, for
example only private persons: where: { kind: [SANCTIONS], entityKind: [PRIVATE_PERSON] }.
Audit dispositioned matches
Filter on status: [CONFIRMED_TRUE, CONFIRMED_FALSE] and select the
dispositions trail on each hit to see what was decided, who decided
it, and when. The trail is newest first, so a re-disposition (say, a
manager re-verifying an earlier suppression) shows up as several
entries:
query DispositionAudit {
dispositionScreeningMatches(
where: { status: [CONFIRMED_TRUE, CONFIRMED_FALSE] }
pageInfo: { size: 50, offset: 0 }
) {
edges {
node {
entityId
entityKind
pepInfo {
hits {
name
dispositions {
status
comment
dispositionedBy { name email }
dispositionedAt
}
}
}
sanctionInfo {
sanctions {
sanctionedBy
dispositions {
status
comment
dispositionedBy { name email }
dispositionedAt
}
}
}
screenings {
monitoredEntity {
... on Company { name }
... on PrivatePerson { name }
}
}
}
}
pageInfo {
totalSize
nextPageOffset
}
}
}Leave status out to return every match whatever its disposition
state, which is handy for a full export. where also takes kind
(PEP / SANCTIONS — the same DatasetKind used on alerts) and
entityKind (COMPANY / PRIVATE_PERSON / BUSINESS_PERSON, on the
screened entity); drop a filter to include everything.