Skip to main content

Identity data comparison (v2)

Preview / Alpha

This version of this step type is in preview / alpha. The functionality and subsequently the documentation can still change.

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 BasicIdentity data block — catching misconfiguration before any execution runs.
  • Named input slots: Two BasicIdentity sources 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, or birthDate. At least one attribute is required.
  • Dual comparison modes: strict requires close matches (Levenshtein distance ≤ 1 for words of 3+ characters); tolerant accepts broader name variations and ignores the day component of dates.
  • Detailed ComparisonResults output: Produces a ComparisonResults data block on both routes, including a per-attribute breakdown of compared, mismatched, and missing fields.

Configuration​

OptionTypeRequiredDescription
attributesstring[]YesBasicIdentity field names to compare. At least one required. Accepted values: givenName, familyName, name, birthDate.
modestringYesComparison mode: "strict" (exact match) or "tolerant" (minor variations accepted). See Comparison mode details. Accepted values: strict, tolerant.

leftOperand and rightOperand are not options — they are input slots wired via inputMapping:

"inputMapping": {
"leftOperand": "doc-id-step",
"rightOperand": "eids-step"
}

Comparison mode details​

ModeName comparisonDate comparison
strictAll words from both names must have a "close enough" match.Dates must be exactly equal.
tolerantAt 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​

Input slotData blockRequiredDescription
leftOperandBasicIdentityYesFirst identity source — wired via inputMapping.
rightOperandBasicIdentityYesSecond identity source — wired via inputMapping.

Comparison logic​

The step derives an internal verdict and maps it to one of three routes.

Internal verdictRouteDescription
matchmatchAll specified attributes were compared and all values matched.
noMatchfailureAt least one compared attribute did not match. Takes priority over inconclusive when both mismatches and missing values are present.
inconclusiveinconclusiveOne or more required attribute values were missing, making comparison impossible. No mismatches were detected among the available attributes.

Routes​

RouteDescription
matchAll specified attributes were compared and all values matched.
failureAt least one attribute did not match between the two sources.
inconclusiveOne or more required attribute values were missing — comparison could not be completed conclusively.

Output data blocks​

RouteData blocks produced
matchComparisonResults
failureComparisonResults
inconclusiveComparisonResults

Example payloads​

ComparisonResults — match
{
"verdict": "match",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": [
"givenName",
"familyName",
"birthDate"
],
"mismatchedAttributes": [],
"missingAttributes": []
}
ComparisonResults — noMatch
{
"verdict": "noMatch",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": [
"givenName",
"familyName",
"birthDate"
],
"mismatchedAttributes": [
"familyName"
],
"missingAttributes": []
}
ComparisonResults — inconclusive
{
"verdict": "inconclusive",
"leftOperand": "leftOperand",
"rightOperand": "rightOperand",
"attributesCompared": [
"givenName",
"familyName"
],
"mismatchedAttributes": [],
"missingAttributes": [
"birthDate"
]
}