You read a SANCTIONS SCREENING ALERT REVIEW SHEET -- one customer record beside the watchlist entry a screening engine matched it to -- and extract structured fields from it. You return JSON and nothing else.
You are PROPOSING an adjudication for a human to decide. You clear nothing, you block nothing and you file nothing: no alert is closed, no party is designated or de-designated, no account is frozen or released, no payment is stopped or let through, and no report is made to anybody.
RULES, in order of importance:
1. If the sheet does not state a field, return null for it. Do not infer it and do not use what you know about the world. Every name, list, programme, place and identifier on these sheets is invented for this exercise -- there is nothing to recognise.
2. `verdict` and `deciding_identifier` are decided ONLY by the ADJUDICATION RULEBOOK given below, applied to eight values -- the two identifier types, the two identifier values, the two dates of birth and the two places of birth. Work through these five checks IN ORDER and STOP at the first one that fires:
a. STRONG IDENTIFIER, SAME VALUE. If BOTH records carry a strong identifier OF THE SAME TYPE and the two values are the same, answer 'same_party' and name that identifier. This outranks everything below it.
b. STRONG IDENTIFIER, DIFFERENT VALUE. If both carry a strong identifier of the same type and the values differ, answer 'not_a_match' and name that identifier. This also outranks everything below it.
c. MODERATE CONFLICT. Otherwise, take the moderate identifiers that are COMPARABLE on both records. If any of them DISAGREES, answer 'not_a_match' and name it. Read date of birth before place of birth.
d. MODERATE AGREEMENT. Otherwise, if at least 2 comparable moderate identifiers AGREE and none disagrees, answer 'same_party'. Name 'date_of_birth_and_place_of_birth' when both agree.
e. OTHERWISE answer 'insufficient_information' and set deciding_identifier to 'none'.
3. TWO STRONG IDENTIFIERS OF DIFFERENT TYPES ARE NOT COMPARABLE. A passport number on the customer record and a national identity number on the watchlist entry say NOTHING about each other. Do not treat that as weak evidence either way -- checks (a) and (b) simply do not fire, and the rule falls through to the moderate identifiers as though neither record carried one.
4. A PARTIAL DATE OF BIRTH IS NOT COMPARABLE. A date is comparable only when BOTH records carry a FULL calendar date. A year-only date ('1978') or a year-and-month date ('1978-04') is a stated fact and is still not comparable -- it neither agrees nor disagrees with anything, and it contributes nothing in either direction. Copy it verbatim into the field and do not pad it out.
5. NAMES, NATIONALITIES AND THE ANALYST'S NOTE ARE FIELDS TO COPY, NOT EVIDENCE. The alert exists because the names looked alike, so name similarity settles nothing. A watchlist record's nationality is routinely stale or secondary and disagrees for the same party all the time. The analyst's note is one person's impression written before anybody compared the identifiers, and on these sheets it often points the wrong way. None of the three is an input to the verdict.
6. `insufficient_information` IS A REAL ANSWER AND YOU SHOULD REACH FOR IT WHEN THE FILE DOES NOT DECIDE. It means these two records do not carry enough to be separated or joined. It is not a clearance and it is not a match, and guessing one of the other two instead is the worst thing you can do on this sheet.
7. Copy names, places, nationalities and identifier values verbatim from the sheet.
8. Use the exact allowed value for a field that lists them. 'none' is a VALUE for the two identifier-type fields, not a blank.
9. Return every field named in the schema, even when the answer is null.
ADJUDICATION RULEBOOK (the authority for `verdict` and `deciding_identifier`; this is an ILLUSTRATIVE rulebook shipped with this kit, not any real list, programme, supervisor's guidance or vendor tuning)
IDENTIFIER STRENGTH TIERS
strong: passport_number, national_id_number, tax_reference
moderate: date_of_birth, place_of_birth
weak: nationality, name_similarity, engine_match_score, analyst_note
WHAT EACH TIER DOES
strong A strong identifier is a number issued to ONE party and to no other. In this rulebook a strong identifier that is present on both records SETTLES the alert, in whichever direction it points, and it outranks every disagreement below it. Two records carrying the same passport number are the same party even if the names are spelled differently and the nationalities disagree; two records carrying different passport numbers are different parties even if the name and the full date of birth agree exactly. That is the sharpest claim in this file and it is deliberately absolute.
moderate A moderate identifier narrows a population; it does not name a party. This rulebook needs MIN_MODERATE_AGREEMENTS of them, agreeing and comparable, before it will join two records — and ONE of them conflicting is enough to separate them. Weak agreements never add up to a strong identifier, and no number of them substitutes for one.
weak A weak field is RECORDED, is EXTRACTED, and is never an input to the verdict. Nationality on a list record is often stale or secondary; the screening engine's own match score is a statement about strings; and the analyst's note is one person's impression written before anybody compared the identifiers. All three are on the alert, all three are read back, and none of them moves the answer.
WHEN A MODERATE IDENTIFIER IS EVEN COMPARABLE
date_of_birth: A date is comparable only when BOTH records carry a FULL calendar date. A year-only or year-and-month date is a STATED FACT and not a missing one — and it is still not comparable, because it cannot agree or disagree with anything at the precision the rule needs. A partial date contributes nothing in either direction.
place_of_birth: A place is comparable only when both records name one. A place published on one record and absent from the other contributes nothing.
IDENTIFIERS OF DIFFERENT TYPES
TWO STRONG IDENTIFIERS OF DIFFERENT TYPES ARE NOT COMPARABLE. A passport number on one record and a national identity number on the other tell you nothing about each other, and this rulebook does not pretend otherwise — it falls through to the moderate fields exactly as though neither record carried an identifier at all. That is one of the two commonest routes to insufficient_information on this corpus.
DECISION ORDER -- stop at the first check that fires
1. STRONG IDENTIFIER, SAME VALUE. If both records carry a strong identifier OF THE SAME TYPE and the values match, answer same_party. Nothing below this line can overturn it.
2. STRONG IDENTIFIER, DIFFERENT VALUE. If both records carry a strong identifier of the same type and the values differ, answer not_a_match. Nothing below this line can overturn it either.
3. MODERATE CONFLICT. With no strong identifier comparable, any single comparable moderate identifier that DISAGREES answers not_a_match. Date of birth is read before place of birth.
4. MODERATE AGREEMENT. At least min_moderate_agreements comparable moderate identifiers agreeing, and none disagreeing, answers same_party.
5. OTHERWISE. Answer insufficient_information, and name what would settle it.
MINIMUM MODERATE AGREEMENTS TO JOIN TWO RECORDS: 2
NAMING THE DECIDING IDENTIFIER
Every verdict names the identifier that produced it, and `none` is the honest answer for insufficient_information. A verdict with no named identifier behind it is an opinion; a verdict that names the wrong one is right by accident, which is why this kit scores the two separately.
WHAT THIS RULEBOOK IS NOT
This kit PROPOSES an adjudication with its reasoning and names what it could not determine. It clears nothing, blocks nothing and files nothing: no alert is closed, no party is designated or de-designated, no account is frozen or released, no payment is stopped or let through, and no report of any kind is made to anybody. A human makes the call.
Extract these fields:
- alert_id (string) -- the alert reference, verbatim
- customer_name (string) -- the name on the CUSTOMER RECORD, verbatim
- listed_name (string) -- the PRIMARY listed name on the WATCHLIST ENTRY, verbatim -- the 'Listed Name' line, never an alias from the 'Also Listed As' line
- customer_identifier_type (enum) one of: passport_number, national_id_number, tax_reference, none -- which strong identifier the CUSTOMER RECORD carries. Return 'none' when the record says no secondary identifier is on file -- 'none' is a value, never a blank
- customer_identifier_value (string) -- the CUSTOMER RECORD's value for that identifier, verbatim. Return null when customer_identifier_type is 'none'
- listed_identifier_type (enum) one of: passport_number, national_id_number, tax_reference, none -- which strong identifier the WATCHLIST ENTRY carries. Return 'none' when the entry says no identifier is published -- it may be a DIFFERENT type from the customer record's, and that is a real and common state
- listed_identifier_value (string) -- the WATCHLIST ENTRY's value for that identifier, verbatim. Return null when listed_identifier_type is 'none'
- customer_dob (string) -- the CUSTOMER RECORD's date of birth EXACTLY as stated, including a partial one -- copy '1978' or '1978-04' as it stands and do not pad it. Return null only where the record says the date of birth is not recorded
- listed_dob (string) -- the WATCHLIST ENTRY's date of birth EXACTLY as stated, including a partial one. Return null only where the entry says no date of birth is published
- customer_place_of_birth (string) -- the CUSTOMER RECORD's place of birth, verbatim. Return null where the record says it is not recorded
- listed_place_of_birth (string) -- the WATCHLIST ENTRY's place of birth, verbatim. Return null where the entry says none is published
- customer_nationality (string) -- the nationality on the CUSTOMER RECORD, verbatim. Report it as stated -- it is NOT an input to the verdict
- listed_nationality (string) -- the nationality on the WATCHLIST ENTRY, verbatim. Report it as stated -- it is NOT an input to the verdict, and a list record's nationality is often stale or secondary
- account_status (enum) one of: pending_onboarding, live -- is the customer's account already live, or is onboarding still pending?
- analyst_note (string) -- the triaging analyst's own free-text remark on the alert, copied verbatim
- verdict (enum) one of: same_party, not_a_match, insufficient_information -- the adjudication this alert's own identifiers produce. Decide it STRICTLY from the two identifier types and values, the two dates of birth and the two places of birth -- never from the names, never from the nationalities and never from the analyst's note. Work through the five checks IN ORDER, stopping at the first that fires. (1) Both records carry a strong identifier OF THE SAME TYPE with the SAME value: 'same_party'. (2) Both carry one of the same type with DIFFERENT values: 'not_a_match'. (3) Otherwise, any comparable moderate identifier that DISAGREES: 'not_a_match'. (4) Otherwise, at least two comparable moderate identifiers agreeing and none disagreeing: 'same_party'. (5) Otherwise: 'insufficient_information'
- deciding_identifier (enum) one of: passport_number, national_id_number, tax_reference, date_of_birth, place_of_birth, date_of_birth_and_place_of_birth, none -- WHICH identifier produced that verdict. A strong identifier that matched or conflicted is named on its own. A single conflicting moderate identifier is named on its own. Two agreeing moderate identifiers are 'date_of_birth_and_place_of_birth'. When the verdict is 'insufficient_information' the answer is 'none' -- nothing on the file decided it
Return a JSON object with exactly these keys: alert_id, customer_name, listed_name, customer_identifier_type, customer_identifier_value, listed_identifier_type, listed_identifier_value, customer_dob, listed_dob, customer_place_of_birth, listed_place_of_birth, customer_nationality, listed_nationality, account_status, analyst_note, verdict, deciding_identifier
Use null for any field the sheet does not state.
ALERT REVIEW SHEET
------------------
Alert Reference
---------------
ALR-SL-46955
Customer Record
---------------
Name: Nevrid Thackmere
Date of Birth: 1966-12-28
Place of Birth: Fennmarch
Nationality: Kastelia
Passport Number: YP5276569
Watchlist Entry
---------------
Listed Name: Nevrid Thackmere
Also Listed As: N. Thackmere; Naevrid Thackmere
Date of Birth: 1966-12-28
Place of Birth: Fennmarch
Nationality: Kastelia
Passport Number: MW2707565
Account Status
--------------
live
Analyst Note
------------
I am satisfied these are the same party.