Identity comparison (v2)
BASIC_IDENTITY_COMPARISON:v2 is available as a preview. BASIC_IDENTITY_COMPARISON:v1 remains the stable version and is not deprecated.
Compares identity details from two sources wired via inputMapping
Ensures the identity information collected from different steps or documents refers to the same person, improving decision accuracy. Unlike v1, the two source steps are wired via inputMapping using named input slots (leftOperand, rightOperand) — the workflow engine resolves and validates the data flow at publish time.
Key features
- Publish-time validation: The workflow engine verifies at publish time that both referenced steps are reachable and each produces a
BasicIdentitydata block — catching misconfiguration before any execution runs. - Named input slots: Two
BasicIdentitysources of the same data block type are disambiguated by slot alias (leftOperand,rightOperand) rather than by DataBlockType key, avoiding collisions. - Configurable attributes: Select which fields to compare —
givenName,familyName,name, orbirthDate. At least one attribute is required. - Dual comparison modes:
strictrequires exact matches;tolerantaccepts minor name variations and ignores the day component of dates. - Detailed
ComparisonResultsoutput: Produces aComparisonResultsdata block on both routes, including a per-attribute breakdown of compared, mismatched, and missing fields.
Configuration
| Option | Type | Required | Description |
|---|---|---|---|
attributes | array of string | Yes | BasicIdentity field names to compare. Accepted values: givenName, familyName, name, birthDate. At least one required. |
mode | string | Yes | Comparison mode: "strict" or "tolerant". See Comparison mode details. |
leftOperand and rightOperand are not options — they are input slots wired via inputMapping:
"inputMapping": {
"leftOperand": "doc-id-step",
"rightOperand": "eids-step"
}
Comparison mode details
| Mode | Name comparison | Date comparison |
|---|---|---|
strict | All words from both names must have a "close enough" match. | Dates must be exactly equal. |
tolerant | At least one word from the first name must have a "close enough" match in the second name. | Year and month must match; day is ignored. |
Input data blocks
| Slot alias | Data block | Required | Description |
|---|---|---|---|
leftOperand | BasicIdentity | Yes | First identity source — wired via inputMapping. |
rightOperand | BasicIdentity | Yes | Second identity source — wired via inputMapping. |
Comparison logic
The step derives an internal verdict and maps it to one of two routes. Both noMatch and inconclusive route to failure.
| Internal verdict | Route | Description |
|---|---|---|
match | match | All specified attributes were compared and all values matched. |
noMatch | failure | At least one compared attribute did not match. Takes priority over inconclusive when both mismatches and missing values are present. |
inconclusive | failure | One or more required attribute values were missing, making comparison impossible. No mismatches were detected among the available attributes. |
Routes
| Route | Description |
|---|---|
match | All specified attributes were compared and all values matched. |
failure | At least one attribute did not match, or one or more required attribute values were missing. |
Output data blocks
| Route | Data blocks produced | Notes |
|---|---|---|
| match | ComparisonResults | All specified attributes matched between the two BasicIdentity sources. |
| failure | ComparisonResults | One or more attributes did not match or were missing. |
Example payloads
ComparisonResults — match
{
"verdict": "match",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": ["givenName", "familyName", "birthDate"],
"mismatchedAttributes": [],
"missingAttributes": []
}
ComparisonResults — failure (no match)
{
"verdict": "noMatch",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": ["givenName", "familyName", "birthDate"],
"mismatchedAttributes": ["familyName"],
"missingAttributes": []
}
ComparisonResults — failure (inconclusive)
{
"verdict": "inconclusive",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": ["givenName", "familyName"],
"mismatchedAttributes": [],
"missingAttributes": ["birthDate"]
}