examples/action-workflow.json
{
"kind": "actions",
"revisionStatus": "draft",
"nodes": [
{
"id": "sof-level",
"type": "actionApplicantLevel",
"name": "Source of Funds",
"levelName": "Source-of-Funds"
},
{
"id": "branch",
"type": "actionExclusiveChoice",
"name": "Investments?"
},
{
"id": "tag-high-risk",
"type": "actionActions",
"name": "Tag high risk",
"actions": [
{
"tag": [
"High risk",
"Investments-funded"
]
},
{
"note": "Funds source is investments \u2014 confirm provenance"
},
{
"sourceKey": "manual-review"
}
]
},
{
"id": "tag-baseline",
"type": "actionActions",
"name": "Baseline tag",
"actions": [
{
"tag": [
"Reviewed by workflow"
]
}
]
}
],
"edges": [
{
"from": "sof-level",
"to": "branch"
},
{
"from": "branch",
"to": "tag-high-risk",
"on": "approved",
"condition": {
"or": [
{
"and": [
{
"op": "eq",
"args": [
{
"exp": "questionnaires.source-of-funds.primary.main"
},
{
"lit": "\"investments\""
}
]
}
]
}
]
}
},
{
"from": "branch",
"to": "tag-baseline",
"on": "approved",
"condition": {
"or": [
{
"and": [
{
"op": "ne",
"args": [
{
"exp": "questionnaires.source-of-funds.primary.main"
},
{
"lit": "\"investments\""
}
]
}
]
}
]
}
}
]
}
examples/aml-routing.json
{
"kind": "default",
"revisionStatus": "draft",
"nodes": [
{
"id": "kyc",
"type": "applicantLevel",
"name": "Basic KYC",
"levelName": "basic-kyc-level"
},
{
"id": "geo",
"type": "exclusiveChoice",
"name": "Geo / client-list gate"
},
{
"id": "reject-geo",
"type": "finalRejection",
"name": "Embargoed region",
"labels": [
"WRONG_USER_REGION"
]
},
{
"id": "aml",
"type": "applicantLevel",
"name": "AML screening",
"levelName": "aml-screening-level"
},
{
"id": "amlgate",
"type": "exclusiveChoice",
"name": "AML label routing"
},
{
"id": "tag-sanc",
"type": "actions",
"name": "Tag sanctions/media",
"actions": [
{
"tag": [
"Sanctions/adverse media"
]
}
]
},
{
"id": "tag-pep",
"type": "actions",
"name": "Tag PEP",
"actions": [
{
"tag": [
"PEP"
]
}
]
},
{
"id": "manual",
"type": "manualReview",
"name": "EDD manual review"
}
],
"edges": [
{
"from": "kyc",
"to": "geo"
},
{
"from": "geo",
"to": "reject-geo",
"condition": {
"or": [
{
"and": [
{
"op": "in",
"args": [
{
"exp": "applicant.country"
},
{
"exp": "clientLists.embargoed_jurisdiction_list"
}
]
}
]
},
{
"and": [
{
"op": "in",
"args": [
{
"exp": "poi.country"
},
{
"exp": "clientLists.embargoed_jurisdiction_list"
}
]
}
]
}
]
}
},
{
"from": "geo",
"to": "aml",
"on": "approved"
},
{
"from": "aml",
"to": "amlgate"
},
{
"from": "amlgate",
"to": "tag-sanc",
"condition": {
"or": [
{
"and": [
{
"op": "containsAny",
"args": [
{
"exp": "applicant.review.rejectLabels"
},
{
"lit": "[\"SANCTIONS\", \"ADVERSE_MEDIA\"]"
}
]
}
]
}
]
}
},
{
"from": "amlgate",
"to": "tag-pep",
"condition": {
"or": [
{
"and": [
{
"op": "contains",
"args": [
{
"exp": "applicant.review.rejectLabels"
},
{
"lit": "\"PEP\""
}
]
}
]
}
]
}
},
{
"from": "tag-sanc",
"to": "manual"
},
{
"from": "tag-pep",
"to": "manual"
}
]
}
examples/country-routing.json
{
"kind": "default",
"revisionStatus": "draft",
"nodes": [
{
"id": "country-check",
"type": "applicantLevel",
"name": "Country selector",
"levelName": "Country Selector"
},
{
"id": "route",
"type": "exclusiveChoice",
"name": "Country router"
},
{
"id": "reject-region",
"type": "finalRejection",
"name": "Region not allowed",
"labels": [
"WRONG_USER_REGION"
]
},
{
"id": "idv",
"type": "applicantLevel",
"name": "Identity check",
"levelName": "IDV"
},
{
"id": "idv-result",
"type": "exclusiveChoice",
"name": "IDV result"
},
{
"id": "manual",
"type": "manualReview",
"name": "Manual review"
}
],
"edges": [
{
"from": "country-check",
"to": "route"
},
{
"from": "route",
"to": "reject-region",
"condition": {
"or": [
{
"and": [
{
"op": "in",
"args": [
{
"exp": "applicant.country"
},
{
"lit": "[\"UZB\", \"DEU\", \"AFG\"]"
}
]
}
]
}
]
}
},
{
"from": "route",
"to": "idv",
"on": "approved",
"condition": {
"or": [
{
"and": [
{
"op": "in",
"args": [
{
"exp": "applicant.country"
},
{
"lit": "[\"USA\", \"CAN\"]"
}
]
}
]
}
]
}
},
{
"from": "idv",
"to": "idv-result"
},
{
"from": "idv-result",
"to": "manual",
"on": "rejected"
}
]
}
examples/risk-routing.json
{
"title": "Risk + Re-attempt Routing (example)",
"kind": "default",
"revisionStatus": "draft",
"desc": "After IDV: if applicant has already retried >3 times, send straight to manual review; otherwise route by country to either fast-path approval or extended due diligence.",
"nodes": [
{ "id": "idv", "type": "level", "name": "IDV", "levelName": "IDV" },
{ "id": "gate", "type": "condition", "name": "Re-attempt / risk gate" },
{ "id": "manual", "type": "review", "name": "Manual review" },
{ "id": "edd", "type": "level", "name": "Extended due diligence", "levelName": "EDD" },
{ "id": "approve", "type": "actions", "name": "Approve fast-path",
"actions": [
{ "tag": ["fast-path-approved"] },
{ "note": "Auto-approved by workflow" }
]
}
],
"edges": [
{ "from": "idv", "to": "gate", "on": ["approved", "resubmission"] },
{ "from": "gate", "to": "manual", "when": "applicant.review.attemptCnt > 3" },
{ "from": "gate", "to": "edd", "when": "applicant.country in [AFG, IRN, PRK, SYR] AND applicant.review.attemptCnt <= 3" },
{ "from": "gate", "to": "approve", "when": "not empty applicant.country AND applicant.review.attemptCnt <= 3" }
]
}
references/workflow-expressions.md
# Workflow expression reference
Authoritative inventory of every legal `exp` path and field type used in workflow edge conditions, generated from Sumsub's `WorkflowExpressionContext` schema. **This file supersedes the illustrative tables in `workflow-schema.md` and `SKILL.md` when they disagree.** Open it whenever a workflow needs an `exp` path you can't quote from memory, or to verify a path before POSTing.
**Structure.**
- `## Types` — one table per type. Start here to explore a namespace (`applicant`, `poi`, `checks`, …).
- `## Index` — flat alphabetical list of every legal dotted path as markdown links into the Types tables.
**Efficient access — don't read end-to-end; this is a lookup database.**
- **Validate a path:** `grep '<leafFieldName>' workflow-expressions.md`. The leaf field name (the last component of the path) appears verbatim in both the Types row and the Index entry. Searching for a full dotted path like `applicant.review.attemptCnt` returns no matches — the Index renders each segment as a markdown link (`` [\`applicant\`](#...).[\`review\`](#...) ``) so the dotted form is not a contiguous substring.
- **Explore a namespace:** jump to the `### <TypeName>` section directly. Anchors are stable (`#ApplicantExpressionData`, `#PoiExpressionData`, `#BackgroundChecksExpressionData`, …).
- **Disambiguate same-named leaves:** the same leaf appears under multiple parents (e.g. `firstName` lives on `applicant.fixedInfo`, on `applicant.info`, and on each document's `crossCheckNameData`). The Index entry shows the full chain — pick the one matching your intent.
**Out of scope here.** This file lists *paths and field types* only. It does not enumerate operators (`eq`, `in`, `gt`, `notEmpty`, …) — see the operator list in `workflow-schema.md` (and the *Edge conditions* section of `SKILL.md`) for those. Some fields are typed as `Enum`; their value lists appear inline in the relevant table.
## Types
### <a name="WorkflowExpressionContext"></a>`Root variables`
| Field | Type | Description |
| --- | --- | --- |
| <a name="WorkflowExpressionContext.applicant"></a>`applicant` | [`Object`](#ApplicantExpressionData) | Applicant information |
| <a name="WorkflowExpressionContext.poi"></a>`poi` | [`Object`](#PoiExpressionData) | Proof of Identity Document |
| <a name="WorkflowExpressionContext.poi2"></a>`poi2` | [`Object`](#PoiExpressionData) | 2-nd Proof of Identity Document |
| <a name="WorkflowExpressionContext.poi3"></a>`poi3` | [`Object`](#PoiExpressionData) | 3-rd Proof of Identity Document |
| <a name="WorkflowExpressionContext.poi4"></a>`poi4` | [`Object`](#PoiExpressionData) | 4-th Proof of Identity Document |
| <a name="WorkflowExpressionContext.poa"></a>`poa` | [`Object`](#PoaExpressionData) | Proof of Address Document |
| <a name="WorkflowExpressionContext.poa2"></a>`poa2` | [`Object`](#PoaExpressionData) | 2-nd Proof of Address Document |
| <a name="WorkflowExpressionContext.device"></a>`device` | [`Object`](#DeviceExpressionData) | Applicant device information |
| <a name="WorkflowExpressionContext.deviceStats"></a>`deviceStats` | [`Object`](#DeviceStatsExpressionData) | Applicant device statistics |
| <a name="WorkflowExpressionContext.questionnaires"></a>`questionnaires` | Map of `Object`-s | Questionnaire item values nested by questionnaire, then section, then item id. <p> E.g. `questionnaire["myQuestionnaireId"]["mySectionId"]["myItemId"]` |
| <a name="WorkflowExpressionContext.clientLists"></a>`clientLists` | Map of `Object`-s | Client Lists by name |
| <a name="WorkflowExpressionContext.checks"></a>`checks` | [`Object`](#BackgroundChecksExpressionData) | Background checks information |
| <a name="WorkflowExpressionContext.action"></a>`action` | [`Object`](#ApplicantActionExpressionData) | Applicant action information |
| <a name="WorkflowExpressionContext.random"></a>`random` | `Double` | Random number between 0.0 and 1.0 |
### <a name="ApplicantExpressionData"></a>`applicant`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantExpressionData.id"></a>`id` | `String` | Applicant ID |
| <a name="ApplicantExpressionData.externalUserId"></a>`externalUserId` | `String` | Applicant external ID |
| <a name="ApplicantExpressionData.createdAt"></a>`createdAt` | [`Date`](#DateExpressionData) | Applicant creation date |
| <a name="ApplicantExpressionData.registrationDate"></a>`registrationDate` | [`Date`](#DateExpressionData) | Client started the relationship with the applicant |
| <a name="ApplicantExpressionData.fullName"></a>`fullName` | `String` | Full name of the applicant |
| <a name="ApplicantExpressionData.country"></a>`country` | `String` | Applicant country (ISO 3166-1 alpha-3) |
| <a name="ApplicantExpressionData.countryOfBirth"></a>`countryOfBirth` | `String` | Applicant country of birth (ISO 3166-1 alpha-3) |
| <a name="ApplicantExpressionData.info"></a>`info` | [`Object`](#ApplicantInfoExpressionData) | Applicant information extracted from documents |
| <a name="ApplicantExpressionData.fixedInfo"></a>`fixedInfo` | [`Object`](#ApplicantInfoExpressionData) | Basic applicant information as provided to our SDK/API/Dashboard |
| <a name="ApplicantExpressionData.review"></a>`review` | [`Object`](#InspectionReviewExpressionData) | Applicant review |
| <a name="ApplicantExpressionData.sourceKey"></a>`sourceKey` | `String` | Source key of the applicant |
| <a name="ApplicantExpressionData.derivatives"></a>`derivatives` | [`Object`](#ApplicantDerivatives) | Various information derived from the applicant |
| <a name="ApplicantExpressionData.metadata"></a>`metadata` | Map of `String`-s | Applicant metadata |
| <a name="ApplicantExpressionData.riskLabels"></a>`riskLabels` | [`Object`](#ApplicantRiskLabels) | Applicant risk labels |
| <a name="ApplicantExpressionData.tags"></a>`tags` | List of `String`-s | Applicant tags |
| <a name="ApplicantExpressionData.assessment"></a>`assessment` | [`Object`](#ApplicantAssessmentExpressionData) | Applicant assessment |
| <a name="ApplicantExpressionData.email"></a>`email` | `String` | Applicant email |
| <a name="ApplicantExpressionData.phone"></a>`phone` | [`Object`](#PhoneExpressionData) | Applicant phone |
| <a name="ApplicantExpressionData.emailDomain"></a>`emailDomain` | `String` | Applicant email domain name |
| <a name="ApplicantExpressionData.type"></a>`type` | [`Enum`](#ApplicantType) | Applicant entity type: `individual` or `company` |
| <a name="ApplicantExpressionData.lang"></a>`lang` | `String` | |
| <a name="ApplicantExpressionData.allMemberRoles"></a>`allMemberRoles` | List of `String`-s | Roles of the applicant |
### <a name="PoiExpressionData"></a>`poi, poi2, poi3, poi4`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PoiExpressionData.crossCheckNameData"></a>`crossCheckNameData` | [`Object`](#CrossCheckNameData) | Data from the document that we use for cross-validation |
| <a name="PoiExpressionData.crossCheckParentName1"></a>`crossCheckParentName1` | [`Object`](#CrossCheckFullNameData) | Parent name Data from the document that we use for cross-validation |
| <a name="PoiExpressionData.crossCheckParentName2"></a>`crossCheckParentName2` | [`Object`](#CrossCheckFullNameData) | Parent name Data from the document that we use for cross-validation |
| <a name="PoiExpressionData.country"></a>`country` | `String` | ID Document country (ISO 3166-1 alpha-3) |
| <a name="PoiExpressionData.idDocType"></a>`idDocType` | `Object` | ID Document type |
| <a name="PoiExpressionData.number"></a>`number` | `String` | ID Document number |
| <a name="PoiExpressionData.additionalNumber"></a>`additionalNumber` | `String` | ID Document additional number |
| <a name="PoiExpressionData.dob"></a>`dob` | [`Date`](#DateExpressionData) | Date of birth |
| <a name="PoiExpressionData.nationality"></a>`nationality` | `String` | Nationality (ISO 3166-1 alpha-3) |
| <a name="PoiExpressionData.placeOfBirth"></a>`placeOfBirth` | `String` | Place of birth |
| <a name="PoiExpressionData.issuedDate"></a>`issuedDate` | [`Date`](#DateExpressionData) | ID Document issue date |
| <a name="PoiExpressionData.issueAuthority"></a>`issueAuthority` | `String` | Authority that issued the ID Document. |
| <a name="PoiExpressionData.issueAuthorityCode"></a>`issueAuthorityCode` | `String` | A unique code of the authority that issued the ID Document. |
| <a name="PoiExpressionData.validUntil"></a>`validUntil` | [`Date`](#DateExpressionData) | ID Document validity date |
| <a name="PoiExpressionData.validityPeriod"></a>`validityPeriod` | [`Object`](#TimespanExpressionData) | ID Document's validity period |
| <a name="PoiExpressionData.firstIssuedDate"></a>`firstIssuedDate` | [`Date`](#DateExpressionData) | ID Document first issue date |
| <a name="PoiExpressionData.metadata"></a>`metadata` | Map of `String`-s | POI metadata. |
| <a name="PoiExpressionData.address"></a>`address` | [`Object`](#AddressExpressionData) | ID Document address |
| <a name="PoiExpressionData.category"></a>`category` | `String` | ID Document category, e.g., category of a driver's license |
| <a name="PoiExpressionData.nfc"></a>`nfc` | [`Object`](#NfcInfoExpressionData) | ID Document NFC information |
| <a name="PoiExpressionData.fullMrz"></a>`fullMrz` | `String` | Machine-Readable Zone lines separated by End of Line (`\n`) symbol |
| <a name="PoiExpressionData.gender"></a>`gender` | `String` | Gender (M or F) |
| <a name="PoiExpressionData.violations"></a>`violations` | [`Object`](#DocViolationsExpressionData) | MRZ / Barcode / DFR violations |
| <a name="PoiExpressionData.ocrDocTypes"></a>`ocrDocTypes` | List of `String`-s | Fine-grained Doc types from OCR |
| <a name="PoiExpressionData.dlCategoryBValidUntil"></a>`dlCategoryBValidUntil` | [`Date`](#DateExpressionData) | Expiry date of category B |
### <a name="PoaExpressionData"></a>`poa, poa2`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PoaExpressionData.crossCheckNameData"></a>`crossCheckNameData` | [`Object`](#CrossCheckNameData) | Data from the document that we use for cross-validation |
| <a name="PoaExpressionData.country"></a>`country` | `String` | ID Document country (ISO 3166-1 alpha-3) |
| <a name="PoaExpressionData.idDocType"></a>`idDocType` | `Object` | ID Document type |
| <a name="PoaExpressionData.number"></a>`number` | `String` | ID Document number |
| <a name="PoaExpressionData.metadata"></a>`metadata` | Map of `String`-s | PoA metadata. |
| <a name="PoaExpressionData.address"></a>`address` | [`Object`](#AddressExpressionData) | ID Document address |
| <a name="PoaExpressionData.issuedDate"></a>`issuedDate` | [`Date`](#DateExpressionData) | ID Document issue date |
| <a name="PoaExpressionData.detectedLanguages"></a>`detectedLanguages` | List of `String`-s | List of 2-letter codes (ISO 639-1) of detected languages. |
| <a name="PoaExpressionData.image"></a>`image` | [`Object`](#ImageExpressionData) | Image's technical details |
| <a name="PoaExpressionData.dob"></a>`dob` | [`Date`](#DateExpressionData) | Date of birth |
| <a name="PoaExpressionData.gender"></a>`gender` | `String` | Gender (M or F) |
| <a name="PoaExpressionData.violations"></a>`violations` | [`Object`](#DocViolationsExpressionData) | MRZ / Barcode / DFR violations |
| <a name="PoaExpressionData.ocrDocTypes"></a>`ocrDocTypes` | List of `String`-s | Fine-grained Doc types from OCR |
### <a name="DeviceExpressionData"></a>`device`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DeviceExpressionData.ipCountry"></a>`ipCountry` | `String` | IP Address Country (ISO 3166-1 alpha-3) |
| <a name="DeviceExpressionData.ipStateCode"></a>`ipStateCode` | `String` | |
| <a name="DeviceExpressionData.info"></a>`info` | [`Object`](#DeviceInfoExpressionData) | |
### <a name="DeviceStatsExpressionData"></a>`deviceStats`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DeviceStatsExpressionData.minutes5"></a>`minutes5` | [`Object`](#DevicePeriodStatsExpressionData) | Running 5-minute stats |
| <a name="DeviceStatsExpressionData.hours1"></a>`hours1` | [`Object`](#DevicePeriodStatsExpressionData) | Running 1-hour stats |
| <a name="DeviceStatsExpressionData.days1"></a>`days1` | [`Object`](#DevicePeriodStatsExpressionData) | Running 1-day stats |
| <a name="DeviceStatsExpressionData.days7"></a>`days7` | [`Object`](#DevicePeriodStatsExpressionData) | Running 7-day stats |
### <a name="BackgroundChecksExpressionData"></a>`checks`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BackgroundChecksExpressionData.all"></a>`all` | [`Object`](#AllBackgroundChecksExpressionData) | Aggregated information about all checks by type |
| <a name="BackgroundChecksExpressionData.poa"></a>`poa` | [`Object`](#PoaCheckExpressionData) | POA information (UTILITY_BILL) |
| <a name="BackgroundChecksExpressionData.poa2"></a>`poa2` | [`Object`](#PoaCheckExpressionData) | POA2 information (UTILITY_BILL2) |
| <a name="BackgroundChecksExpressionData.ekyc"></a>`ekyc` | [`Object`](#EkycCheckExpressionData) | E_KYC information |
| <a name="BackgroundChecksExpressionData.company"></a>`company` | [`Object`](#CompanyCheckExpressionData) | Company information |
| <a name="BackgroundChecksExpressionData.companyTax"></a>`companyTax` | [`Object`](#CompanyTaxCheckExpressionData) | Company tax information |
| <a name="BackgroundChecksExpressionData.companyStructure"></a>`companyStructure` | [`Object`](#CompanyStructureCheckExpressionData) | Company structure information |
| <a name="BackgroundChecksExpressionData.customDataSources"></a>`customDataSources` | Map of [`Object`](#CustomDataSourceExpressionData)-s | Custom data sources |
| <a name="BackgroundChecksExpressionData.personWatchlist"></a>`personWatchlist` | [`Object`](#PersonWatchlistCheckExpressionData) | Watchlist matching the person |
| <a name="BackgroundChecksExpressionData.companyWatchlist"></a>`companyWatchlist` | [`Object`](#CompanyWatchlistCheckExpressionData) | Watchlist matching the company |
| <a name="BackgroundChecksExpressionData.email"></a>`email` | [`Object`](#EmailConfirmationCheckExpressionData) | Email confirmation |
| <a name="BackgroundChecksExpressionData.phone"></a>`phone` | [`Object`](#PhoneConfirmationCheckExpressionData) | Phone confirmation |
| <a name="BackgroundChecksExpressionData.ip"></a>`ip` | [`Object`](#IpCheckExpressionData) | IP information |
| <a name="BackgroundChecksExpressionData.paymentSource"></a>`paymentSource` | [`Object`](#PaymentSourceCheckInfoExpressionData) | Payment source check info |
| <a name="BackgroundChecksExpressionData.nfcCheck"></a>`nfcCheck` | [`Object`](#NfcCheckExpressionData) | NFC source check info |
### <a name="ApplicantActionExpressionData"></a>`action`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantActionExpressionData.id"></a>`id` | `String` | Action ID |
| <a name="ApplicantActionExpressionData.externalActionId"></a>`externalActionId` | `String` | Action external ID |
| <a name="ApplicantActionExpressionData.createdAt"></a>`createdAt` | [`Date`](#DateExpressionData) | Action creation date |
| <a name="ApplicantActionExpressionData.review"></a>`review` | [`Object`](#InspectionReviewExpressionData) | Action review |
| <a name="ApplicantActionExpressionData.paymentSource"></a>`paymentSource` | [`Object`](#PaymentSourceExpressionData) | Payment Source info |
| <a name="ApplicantActionExpressionData.metadata"></a>`metadata` | Map of `String`-s | Action metadata |
| <a name="ApplicantActionExpressionData.actionFixedInfo"></a>`actionFixedInfo` | [`Object`](#ApplicantInfoExpressionData) | Basic applicant information as provided to our SDK/API/Dashboard |
| <a name="ApplicantActionExpressionData.questionnaires"></a>`questionnaires` | Map of `Object`-s | Questionnaire item values nested by questionnaire, then section, then item id. <p> E.g. `questionnaire["myQuestionnaireId"]["mySectionId"]["myItemId"]` |
| <a name="ApplicantActionExpressionData.checks"></a>`checks` | [`Object`](#BackgroundChecksActionExpressionData) | |
### <a name="DateExpressionData"></a>`date`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DateExpressionData.timestamp"></a>`timestamp` | `long` | Unix timestamp in milliseconds |
| <a name="DateExpressionData.yyyymmdd"></a>`yyyymmdd` | `int` | Numeric day in YYYYMMDD format, e.g. 20230123 |
| <a name="DateExpressionData.year"></a>`year` | `int` | Year |
| <a name="DateExpressionData.month"></a>`month` | `int` | Month of year (starts from 1) |
| <a name="DateExpressionData.dayOfMonth"></a>`dayOfMonth` | `int` | Day of month (start from 1) |
| <a name="DateExpressionData.ageInYears"></a>`ageInYears` | `int` | Time dela in years between this date and now |
| <a name="DateExpressionData.ageInDays"></a>`ageInDays` | `int` | Time delta in days between this date and now |
### <a name="ApplicantInfoExpressionData"></a>`applicant.info`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantInfoExpressionData.crossCheckNameData"></a>`crossCheckNameData` | [`Object`](#CrossCheckNameData) | Data that we use for cross-validation |
| <a name="ApplicantInfoExpressionData.crossCheckParentName1"></a>`crossCheckParentName1` | [`Object`](#CrossCheckFullNameData) | Parent name data that we use for cross-validation |
| <a name="ApplicantInfoExpressionData.crossCheckParentName2"></a>`crossCheckParentName2` | [`Object`](#CrossCheckFullNameData) | Parent name data that we use for cross-validation |
| <a name="ApplicantInfoExpressionData.country"></a>`country` | `String` | Applicant country (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.countryOfBirth"></a>`countryOfBirth` | `String` | Applicant country of birth (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.firstName"></a>`firstName` | `String` | First name |
| <a name="ApplicantInfoExpressionData.firstNameEn"></a>`firstNameEn` | `String` | Transliterated first name |
| <a name="ApplicantInfoExpressionData.middleName"></a>`middleName` | `String` | Middle name |
| <a name="ApplicantInfoExpressionData.middleNameEn"></a>`middleNameEn` | `String` | Transliterated middle name |
| <a name="ApplicantInfoExpressionData.lastName"></a>`lastName` | `String` | Last name |
| <a name="ApplicantInfoExpressionData.lastNameEn"></a>`lastNameEn` | `String` | Transliterated last name |
| <a name="ApplicantInfoExpressionData.gender"></a>`gender` | `String` | Gender (M or F) |
| <a name="ApplicantInfoExpressionData.nationality"></a>`nationality` | `String` | Nationality (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.taxResidenceCountry"></a>`taxResidenceCountry` | `String` | Tax Residence Country (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.residenceCountry"></a>`residenceCountry` | `String` | Residence Country (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.age"></a>`age` | `Integer` | Applicant age |
| <a name="ApplicantInfoExpressionData.dob"></a>`dob` | [`Date`](#DateExpressionData) | Date of birth |
| <a name="ApplicantInfoExpressionData.address"></a>`address` | [`Object`](#AddressExpressionData) | Applicant address |
| <a name="ApplicantInfoExpressionData.addresses"></a>`addresses` | [`Object`](#ApplicantInfoAddressesExpressionData) | |
| <a name="ApplicantInfoExpressionData.companyInfo"></a>`companyInfo` | [`Object`](#CompanyInfoExpressionData) | Company information (KYB) |
| <a name="ApplicantInfoExpressionData.tinCountries"></a>`tinCountries` | List of `String`-s | Countries from TINs (ISO 3166-1 alpha-3) |
| <a name="ApplicantInfoExpressionData.tin"></a>`tin` | `String` | |
| <a name="ApplicantInfoExpressionData.phone"></a>`phone` | [`Object`](#PhoneExpressionData) | |
### <a name="InspectionReviewExpressionData"></a>`applicant.review, action.review`
| Field | Type | Description |
| --- | --- | --- |
| <a name="InspectionReviewExpressionData.levelName"></a>`levelName` | `String` | Applicant level |
| <a name="InspectionReviewExpressionData.decision"></a>`decision` | [`Enum`](#ReviewDecision) | Review decision |
| <a name="InspectionReviewExpressionData.reviewAnswer"></a>`reviewAnswer` | [`Enum`](#ImageTestAnswer) | Review answer |
| <a name="InspectionReviewExpressionData.attemptCnt"></a>`attemptCnt` | `Integer` | Number of attempts |
| <a name="InspectionReviewExpressionData.rejectLabels"></a>`rejectLabels` | List of [`Enum`](#ReviewResult.ReviewLabel)-s | List of rejection labels |
| <a name="InspectionReviewExpressionData.buttonIds"></a>`buttonIds` | List of `String`-s | List of button ids |
### <a name="ApplicantDerivatives"></a>`applicant.derivatives`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantDerivatives.estimatedAge"></a>`estimatedAge` | `Integer` | Applicant estimated age. |
### <a name="ApplicantRiskLabels"></a>`riskLabels`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantRiskLabels.email"></a>`email` | List of [`Enum`](#EmailRiskLabel)-s | Email risk labels |
| <a name="ApplicantRiskLabels.phone"></a>`phone` | List of [`Enum`](#PhoneRiskLabel)-s | Phone risk labels |
| <a name="ApplicantRiskLabels.device"></a>`device` | List of [`Enum`](#DeviceRiskLabel)-s | Device risk labels |
| <a name="ApplicantRiskLabels.deviceCheck"></a>`deviceCheck` | List of [`Enum`](#AntifraudDeviceCheckRiskLabel)-s | Device check risk labels |
| <a name="ApplicantRiskLabels.crossCheck"></a>`crossCheck` | List of [`Enum`](#CrossCheckRiskLabel)-s | Cross-check risk labels |
| <a name="ApplicantRiskLabels.selfie"></a>`selfie` | List of [`Enum`](#SelfieRiskLabel)-s | Selfie risk labels |
| <a name="ApplicantRiskLabels.aml"></a>`aml` | List of [`Enum`](#AmlRiskLabel)-s | AML risk labels |
| <a name="ApplicantRiskLabels.person"></a>`person` | List of [`Enum`](#PersonRiskLabel)-s | Person risk labels |
| <a name="ApplicantRiskLabels.company"></a>`company` | List of [`Enum`](#CompanyRiskLabel)-s | Company risk labels |
### <a name="ApplicantAssessmentExpressionData"></a>`applicant.assessment`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantAssessmentExpressionData.totalScore"></a>`totalScore` | `Float` | |
| <a name="ApplicantAssessmentExpressionData.scores"></a>`scores` | Map of [`Object`](#ApplicantAssessmentResultExpressionData)-s | |
### <a name="PhoneExpressionData"></a>`phone`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PhoneExpressionData.number"></a>`number` | `String` | |
| <a name="PhoneExpressionData.country"></a>`country` | `String` | |
### <a name="ApplicantType"></a>`applicant.type`
| Value | Description |
| --- | --- |
| `individual` | Individual applicant. |
| `company` | Company applicant. |
### <a name="CrossCheckNameData"></a>`crossCheckNameData`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CrossCheckNameData.country"></a>`country` | `String` | |
| <a name="CrossCheckNameData.firstName"></a>`firstName` | `String` | |
| <a name="CrossCheckNameData.middleName"></a>`middleName` | `String` | |
| <a name="CrossCheckNameData.lastName"></a>`lastName` | `String` | |
| <a name="CrossCheckNameData.aliasName"></a>`aliasName` | `String` | |
### <a name="CrossCheckFullNameData"></a>`crossCheckParentName1, crossCheckParentName2`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CrossCheckFullNameData.country"></a>`country` | `String` | |
| <a name="CrossCheckFullNameData.fullName"></a>`fullName` | `String` | |
### <a name="TimespanExpressionData"></a>`validityPeriod`
| Field | Type | Description |
| --- | --- | --- |
| <a name="TimespanExpressionData.millis"></a>`millis` | `long` | Milliseconds |
| <a name="TimespanExpressionData.days"></a>`days` | `long` | Days |
| <a name="TimespanExpressionData.hours"></a>`hours` | `long` | Hours |
| <a name="TimespanExpressionData.minutes"></a>`minutes` | `long` | Minutes |
| <a name="TimespanExpressionData.seconds"></a>`seconds` | `long` | Seconds |
### <a name="AddressExpressionData"></a>`address`
| Field | Type | Description |
| --- | --- | --- |
| <a name="AddressExpressionData.country"></a>`country` | `String` | Country code (ISO 3166-1 alpha-3). |
| <a name="AddressExpressionData.formattedAddress"></a>`formattedAddress` | `String` | |
| <a name="AddressExpressionData.state"></a>`state` | `String` | State name or region if applicable. |
| <a name="AddressExpressionData.stateCode"></a>`stateCode` | `String` | ISO 3166-2 state code |
| <a name="AddressExpressionData.town"></a>`town` | `String` | Town if applicable. |
| <a name="AddressExpressionData.street"></a>`street` | `String` | Street if applicable. |
| <a name="AddressExpressionData.subStreet"></a>`subStreet` | `String` | Street (line 2) if applicable. |
| <a name="AddressExpressionData.postCode"></a>`postCode` | `String` | Post code if applicable. |
| <a name="AddressExpressionData.buildingName"></a>`buildingName` | `String` | |
| <a name="AddressExpressionData.buildingNumber"></a>`buildingNumber` | `String` | |
| <a name="AddressExpressionData.flatNumber"></a>`flatNumber` | `String` | |
### <a name="NfcInfoExpressionData"></a>`nfc`
Information read from NFC Chip
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcInfoExpressionData.fullMrz"></a>`fullMrz` | `String` | Full MRZ |
### <a name="DocViolationsExpressionData"></a>`violations`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DocViolationsExpressionData.mrz"></a>`mrz` | List of [`Enum`](#BackgroundCheckViolation)-s | |
| <a name="DocViolationsExpressionData.dfr"></a>`dfr` | List of [`Enum`](#BackgroundCheckViolation)-s | |
| <a name="DocViolationsExpressionData.barcode"></a>`barcode` | List of [`Enum`](#BackgroundCheckViolation)-s | |
### <a name="ImageExpressionData"></a>`poa.image, poa2.image`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ImageExpressionData.softwareTag"></a>`softwareTag` | `String` | Software |
| <a name="ImageExpressionData.mimeType"></a>`mimeType` | [`Enum`](#MediaTypeId) | |
### <a name="DeviceInfoExpressionData"></a>`device.info`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DeviceInfoExpressionData.make"></a>`make` | `String` | |
| <a name="DeviceInfoExpressionData.model"></a>`model` | `String` | |
| <a name="DeviceInfoExpressionData.type"></a>`type` | `String` | |
| <a name="DeviceInfoExpressionData.platform"></a>`platform` | `String` | |
| <a name="DeviceInfoExpressionData.platformVersion"></a>`platformVersion` | `String` | |
| <a name="DeviceInfoExpressionData.browser"></a>`browser` | `String` | |
| <a name="DeviceInfoExpressionData.browserFullVersion"></a>`browserFullVersion` | `String` | |
### <a name="DevicePeriodStatsExpressionData"></a>`deviceStats.minutes5`
| Field | Type | Description |
| --- | --- | --- |
| <a name="DevicePeriodStatsExpressionData.riskLevel"></a>`riskLevel` | [`Enum`](#ImageTestAnswer) | |
| <a name="DevicePeriodStatsExpressionData.deviceCount"></a>`deviceCount` | `Integer` | Number of devices of an applicant within a period |
| <a name="DevicePeriodStatsExpressionData.sameDeviceApplicantCount"></a>`sameDeviceApplicantCount` | `Integer` | Number of applicants that share any device with this applicant within a period (0 if noone else shares any device) |
| <a name="DevicePeriodStatsExpressionData.riskLabels"></a>`riskLabels` | List of `String`-s | All risk labels associated with the applicant's devices within a period |
| <a name="DevicePeriodStatsExpressionData.deviceIds"></a>`deviceIds` | List of `String`-s | Applicant device ids |
### <a name="AllBackgroundChecksExpressionData"></a>`checks.all`
| Field | Type | Description |
| --- | --- | --- |
| <a name="AllBackgroundChecksExpressionData.ip"></a>`ip` | [`Object`](#AllIpChecksExpressionData) | Aggregated IP check information |
### <a name="PoaCheckExpressionData"></a>`checks.poa, checks.poa2`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PoaCheckExpressionData.companyType"></a>`companyType` | [`Enum`](#PoaCompanyContactType) | POA company type |
| <a name="PoaCheckExpressionData.subType"></a>`subType` | [`Enum`](#PoaSubType) | POA sub type if applicable |
| <a name="PoaCheckExpressionData.unconventionalProvider"></a>`unconventionalProvider` | `Boolean` | Indicates whether POA was obtained via an unconventional provider, e.g. a neo-bank if companyType equals "bank". |
### <a name="EkycCheckExpressionData"></a>`checks.ekyc`
| Field | Type | Description |
| --- | --- | --- |
| <a name="EkycCheckExpressionData.extractedData"></a>`extractedData` | [`Object`](#BgCheckExtractedExpressionData) | Extracted data from an external source |
| <a name="EkycCheckExpressionData.violations"></a>`violations` | List of [`Enum`](#BackgroundCheckViolation)-s | List of NonDoc step violations |
### <a name="CompanyCheckExpressionData"></a>`checks.company`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyCheckExpressionData.answer"></a>`answer` | [`Enum`](#ImageTestAnswer) | Company check answer |
| <a name="CompanyCheckExpressionData.info"></a>`info` | [`Object`](#CompanyCheckInfoExpressionData) | Additional company check data. |
### <a name="CompanyTaxCheckExpressionData"></a>`checks.companyTax`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyTaxCheckExpressionData.answer"></a>`answer` | [`Enum`](#ImageTestAnswer) | |
### <a name="CompanyStructureCheckExpressionData"></a>`checks.companyStructure`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyStructureCheckExpressionData.answer"></a>`answer` | [`Enum`](#ImageTestAnswer) | |
### <a name="CustomDataSourceExpressionData"></a>`Elements of checks.customDataSources`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CustomDataSourceExpressionData.success"></a>`success` | `Boolean` | |
| <a name="CustomDataSourceExpressionData.output"></a>`output` | Map of `Object`-s | |
### <a name="PersonWatchlistCheckExpressionData"></a>`checks.personWatchlist`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PersonWatchlistCheckExpressionData.matchStatuses"></a>`matchStatuses` | List of `String`-s | Watchlist match statuses for the person. Either one of "unknown", "no_match", "potential_match", "false_positive", or "true_positive". |
| <a name="PersonWatchlistCheckExpressionData.ongoingMatchStatuses"></a>`ongoingMatchStatuses` | List of `String`-s | Statuses of matches received in the latest ongoing update. Either one of "unknown", "no_match", "potential_match", "false_positive", or "true_positive". |
| <a name="PersonWatchlistCheckExpressionData.ongoingUpdatedAt"></a>`ongoingUpdatedAt` | [`Date`](#DateExpressionData) | Date and time of the latest ongoing update of AML matches, if any. |
| <a name="PersonWatchlistCheckExpressionData.tags"></a>`tags` | List of `String`-s | Tags can be added by AML rule with purpose to check it in another rule. |
### <a name="CompanyWatchlistCheckExpressionData"></a>`checks.companyWatchlist`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyWatchlistCheckExpressionData.matchStatuses"></a>`matchStatuses` | List of `String`-s | Watchlist match statuses for the company. Either one of "unknown", "no_match", "potential_match", "false_positive", or "true_positive". |
| <a name="CompanyWatchlistCheckExpressionData.tags"></a>`tags` | List of `String`-s | Tags can be added by AML rule with purpose to check it in another rule. |
### <a name="EmailConfirmationCheckExpressionData"></a>`checks.email`
| Field | Type | Description |
| --- | --- | --- |
| <a name="EmailConfirmationCheckExpressionData.confirmedViaOtp"></a>`confirmedViaOtp` | [`Enum`](#ImageTestAnswer) | Email OTP confirmation answer |
| <a name="EmailConfirmationCheckExpressionData.nonDisposable"></a>`nonDisposable` | [`Enum`](#ImageTestAnswer) | Non-disposable email answer |
| <a name="EmailConfirmationCheckExpressionData.blacklisted"></a>`blacklisted` | [`Enum`](#ImageTestAnswer) | Blocklisted email answer |
### <a name="PhoneConfirmationCheckExpressionData"></a>`checks.phone`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PhoneConfirmationCheckExpressionData.confirmedViaOtp"></a>`confirmedViaOtp` | [`Enum`](#ImageTestAnswer) | Phone OTP confirmation answer |
| <a name="PhoneConfirmationCheckExpressionData.blacklisted"></a>`blacklisted` | [`Enum`](#ImageTestAnswer) | Blocklisted phone answer |
### <a name="IpCheckExpressionData"></a>`checks.ip`
| Field | Type | Description |
| --- | --- | --- |
| <a name="IpCheckExpressionData.country"></a>`country` | `String` | IP Address country |
| <a name="IpCheckExpressionData.vpn"></a>`vpn` | [`Enum`](#ImageTestAnswer) | IP Address VPN answer |
| <a name="IpCheckExpressionData.tor"></a>`tor` | [`Enum`](#ImageTestAnswer) | IP Address TOR answer |
| <a name="IpCheckExpressionData.proxy"></a>`proxy` | [`Enum`](#ImageTestAnswer) | IP Address PROXY answer |
| <a name="IpCheckExpressionData.riskLevel"></a>`riskLevel` | [`Enum`](#ImageTestAnswer) | IP Address Risk Level |
### <a name="PaymentSourceCheckInfoExpressionData"></a>`checks.paymentSource, action.checks.paymentSource`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PaymentSourceCheckInfoExpressionData.extractedInfo"></a>`extractedInfo` | [`Object`](#PaymentSourceInfoExpressionData) | |
| <a name="PaymentSourceCheckInfoExpressionData.riskCheck"></a>`riskCheck` | [`Object`](#PaymentSourceRiskCheckExpressionData) | |
### <a name="NfcCheckExpressionData"></a>`checks.nfcCheck`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcCheckExpressionData.validation"></a>`validation` | [`Object`](#NfcValidationExpressionData) | |
| <a name="NfcCheckExpressionData.extractedData"></a>`extractedData` | [`Object`](#NfcExtractedDataExpressionData) | |
### <a name="PaymentSourceExpressionData"></a>`action.paymentSource`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PaymentSourceExpressionData.fixedInfo"></a>`fixedInfo` | [`Object`](#PaymentSourceInfoExpressionData) | Payment source info predefined from a client or from user |
| <a name="PaymentSourceExpressionData.info"></a>`info` | [`Object`](#PaymentSourceInfoExpressionData) | Payment source info recognised from the image |
### <a name="BackgroundChecksActionExpressionData"></a>`action.checks`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BackgroundChecksActionExpressionData.crossValidation"></a>`crossValidation` | [`Object`](#CrossValidationCheckExpressionData) | |
| <a name="BackgroundChecksActionExpressionData.paymentSource"></a>`paymentSource` | [`Object`](#PaymentSourceCheckInfoExpressionData) | Payment source check info |
### <a name="ApplicantInfoAddressesExpressionData"></a>`addresses`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantInfoAddressesExpressionData.manual"></a>`manual` | [`Object`](#AddressExpressionData) | User manually filled address Applicant address |
| <a name="ApplicantInfoAddressesExpressionData.autoComplete"></a>`autoComplete` | [`Object`](#AddressExpressionData) | User used autocomplete to fill Applicant address |
| <a name="ApplicantInfoAddressesExpressionData.gps"></a>`gps` | [`Object`](#AddressExpressionData) | User used gps location to provide the address |
| <a name="ApplicantInfoAddressesExpressionData.externalDb"></a>`externalDb` | [`Object`](#AddressExpressionData) | External database was used to provide the address |
| <a name="ApplicantInfoAddressesExpressionData.proofOfAddress"></a>`proofOfAddress` | [`Object`](#AddressExpressionData) | Proof of an address document was used to provide the address |
| <a name="ApplicantInfoAddressesExpressionData.proofOfIdentity"></a>`proofOfIdentity` | [`Object`](#AddressExpressionData) | Identity document was used to provide the address |
### <a name="CompanyInfoExpressionData"></a>`companyInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyInfoExpressionData.country"></a>`country` | `String` | Company country (ISO 3166-1 alpha-3) |
| <a name="CompanyInfoExpressionData.type"></a>`type` | `String` | |
| <a name="CompanyInfoExpressionData.legalForm"></a>`legalForm` | `String` | |
| <a name="CompanyInfoExpressionData.companyName"></a>`companyName` | `String` | |
| <a name="CompanyInfoExpressionData.registrationNumber"></a>`registrationNumber` | `String` | |
| <a name="CompanyInfoExpressionData.leiCode"></a>`leiCode` | `String` | |
| <a name="CompanyInfoExpressionData.address"></a>`address` | [`Object`](#AddressExpressionData) | |
| <a name="CompanyInfoExpressionData.legalAddress"></a>`legalAddress` | `String` | |
| <a name="CompanyInfoExpressionData.postalAddress"></a>`postalAddress` | `String` | |
| <a name="CompanyInfoExpressionData.registrationLocation"></a>`registrationLocation` | `String` | |
| <a name="CompanyInfoExpressionData.incorporatedOn"></a>`incorporatedOn` | `Date` | |
| <a name="CompanyInfoExpressionData.incorporationDate"></a>`incorporationDate` | [`Date`](#DateExpressionData) | Company incorporation date. |
| <a name="CompanyInfoExpressionData.email"></a>`email` | `String` | |
| <a name="CompanyInfoExpressionData.phone"></a>`phone` | `String` | |
| <a name="CompanyInfoExpressionData.taxId"></a>`taxId` | `String` | |
| <a name="CompanyInfoExpressionData.website"></a>`website` | `String` | |
| <a name="CompanyInfoExpressionData.noUBOs"></a>`noUBOs` | `Boolean` | |
| <a name="CompanyInfoExpressionData.noShareholders"></a>`noShareholders` | `Boolean` | |
| <a name="CompanyInfoExpressionData.beneficiallyHeld"></a>`beneficiallyHeld` | `Boolean` | |
| <a name="CompanyInfoExpressionData.skippedTypes"></a>`skippedTypes` | List of `String`-s | |
| <a name="CompanyInfoExpressionData.ownershipStructureDepth"></a>`ownershipStructureDepth` | `Integer` | |
| <a name="CompanyInfoExpressionData.beneficiaryStats"></a>`beneficiaryStats` | [`Object`](#BeneficiaryStatsExpressionData) | |
| <a name="CompanyInfoExpressionData.upcomingDocumentExpiration"></a>`upcomingDocumentExpiration` | [`Object`](#UpcomingDocumentExpirationExpressionData) | |
### <a name="ReviewDecision"></a>`applicant.review.decision, action.review.decision`
| Value | Description |
| --- | --- |
| `approved` | Review is approved. |
| `rejected` | Review is rejected. |
| `resubmission` | Resubmission requested. |
### <a name="ImageTestAnswer"></a>`riskLevel`
Review answer
| Value | Description |
| --- | --- |
| `IGNORED` | Check was skipped. |
| `GREEN` | Everything is fine. |
| `YELLOW` | Fine with some warnings / but most likely undefined (requires attention, review) |
| `RED` | Some violations found. |
| `ERROR` | Error occurred. |
### <a name="ReviewResult.ReviewLabel"></a>`Elements of applicant.review.rejectLabels, Elements of action.review.rejectLabels`
Review Rejection label
| Value | Description |
| --- | --- |
| `FORGERY` | Forgery attempt |
| `CRIMINAL` | The user is involved in illegal actions |
| `DOCUMENT_TEMPLATE` | Documents supplied are templates, downloaded from the internet |
| `LOW_QUALITY` | Documents have low-quality that doesn't allow definitive conclusions to be made |
| `SPAM` | An applicant has been created by mistake or is just a spam user (irrelevant images were supplied) |
| `NOT_DOCUMENT` | Documents supplied aren't relevant for the verification procedure |
| `SELFIE_MISMATCH` | A user photo (profile image) doesn't match a photo on the provided documents |
| `ID_INVALID` | A document that identifies a person (like a passport or an ID card) is not valid |
| `DOCUMENT_DEPRIVED` | The user has been deprived of the document |
| `FOREIGNER` | When a client doesn't accept applicants from a different country or e.g. without a residence permit |
| `DUPLICATE` | This applicant was already created for this client, and duplicates aren't allowed by the regulations |
| `BAD_AVATAR` | Avatar doesn't meet the client's requirements |
| `WRONG_USER_REGION` | When applicants from certain regions/countries aren't allowed to be registered |
| `WRONG_ADDRESS` | The address from the documents doesn't match the address that the user entered |
| `INCOMPLETE_DOCUMENT` | Some information is missing from the document, or it's partially visible |
| `BLACKLIST` | The User is blocklisted by us |
| `BLOCKLIST` | The User is blocklisted by the client |
| `OTHER` | Some unclassified reason |
| `UNSATISFACTORY_PHOTOS` | There were problems with the photos, like poor quality or masked information |
| `GRAPHIC_EDITOR` | The document has been edited by a graphical editor |
| `DOCUMENT_PAGE_MISSING` | Some pages of a document are missing (if applicable) |
| `DOCUMENT_DAMAGED` | Document is damaged |
| `DIGITAL_DOCUMENT` | Document is digital and cannot be accepted |
| `REGULATIONS_VIOLATIONS` | Regulations violations |
| `INCONSISTENT_PROFILE` | Data or documents of different persons were uploaded to one applicant |
| `PROBLEMATIC_APPLICANT_DATA` | Applicant data doesn't match the data in the documents |
| `GPS_AS_POA_SKIPPED` | When GpsAsPoa was skipped && no image uploaded |
| `ADDITIONAL_DOCUMENT_REQUIRED` | Additional documents required to pass the check For image review |
| `MORE_DOCUMENTS_REQUIRED` | Additional documents required to pass the check For applicant review |
| `AGE_REQUIREMENT_MISMATCH` | The Age requirement is not met (e.g. can't rent a car to a person below 25yo) |
| `REQUESTED_DATA_MISMATCH` | Provided info doesn't match with recognized from document data |
| `EXPERIENCE_REQUIREMENT_MISMATCH` | Not enough experience (e.g. driving experience is not enough) |
| `COMPROMISED_PERSONS` | The user doesn't correspond to Compromised Person Politics |
| `PEP` | The user belongs to the PEP category |
| `ADVERSE_MEDIA` | The user was found in the adverse media |
| `FRAUDULENT_PATTERNS` | Fraudulent behavior was detected |
| `STOLEN_DOCS` | If the user flagged verification as not them via SNS ID => their documents were suspected stolen |
| `SANCTIONS` | The user was found on sanction lists |
| `NOT_ALL_CHECKS_COMPLETED` | All checks weren't completed |
| `FRONT_SIDE_MISSING` | Front side of the document is missing |
| `BACK_SIDE_MISSING` | Back side of the document is missing |
| `SCREENSHOTS` | The user uploaded screenshots |
| `BLACK_AND_WHITE` | The user uploaded black and white photos of documents |
| `INCOMPATIBLE_LANGUAGE` | The user should upload translation of his document |
| `EXPIRATION_DATE` | The user uploaded an expired document |
| `UNFILLED_ID` | The user uploaded the document without signatures and stamps |
| `BAD_SELFIE` | The user uploaded a bad selfie |
| `BAD_VIDEO_SELFIE` | The user uploaded a bad video selfie |
| `BAD_FACE_MATCHING` | Face check between a document and selfie failed |
| `BAD_PROOF_OF_IDENTITY` | The user uploaded a bad ID document |
| `BAD_PROOF_OF_ADDRESS` | The user uploaded a bad proof of address |
| `BAD_PROOF_OF_PAYMENT` | The user uploaded a bad proof of payment |
| `SELFIE_WITH_PAPER` | The user should upload a special selfie (e.g. selfie with paper and date on it) |
| `FRAUDULENT_LIVENESS` | There was an attempt to bypass liveness check |
| `EXTERNAL_DECISION_REJECTION` | Always final client reject (applicant status via api) |
| `OK` | Custom reject label |
| `COMPANY_NOT_DEFINED_STRUCTURE` | Couldn't establish the entity's control structure |
| `COMPANY_NOT_DEFINED_BENEFICIARIES` | Couldn't identify and duly verify the entity's beneficial owners |
| `COMPANY_NOT_VALIDATED_BENEFICIAL_OWNERS` | Not all beneficial owners have passed the KYC verification procedure |
| `COMPANY_NOT_VALIDATED_BENEFICIARIES` | Beneficiaries are not validated |
| `COMPANY_NOT_VALIDATED_DIRECTORS` | Not all directors have passed the KYC verification procedure |
| `COMPANY_NOT_DEFINED_REPRESENTATIVES` | Representatives are not defined |
| `COMPANY_NOT_VALIDATED_REPRESENTATIVES` | Representatives are not validated |
| `UNSUITABLE_DOCUMENT` | Document either doesn't fit the required type or lacks obligatory elements, like seal, apostille, or notary certification |
| `OUTDATED_DOCUMENT_VERSION` | Based on the publicly available state company register not the most recent version was provided |
| `COMPANY_NOT_DEFINED_OWNERSHIP_STRUCTURE` | Company ownership structure has not specified or differs from the one declared by the corporate documents |
| `COMPANY_INACTIVE_ENTITY` | According to the publicly available state company registry, the entity is inactive / dissolved / deregistered |
| `COMPANY_INCORRECT_DATA` | Provided company attributes like Name, Registration or Tax Number don't match the provided documents or the state company registry |
| `COMPANY_PROBLEMATIC_STRUCTURE` | There are officials in the control and ownership structure who got rejected |
| `COMPANY_DATA_MISMATCH` | Company attributes like Name, Registration on the provided documents doesn't the match state company registry |
| `APPLICANT_INTERRUPTED_INTERVIEW` | On Video Ident call user refused to finish the interview |
| `DOCUMENT_MISSING` | On Video Ident call user refused to show or didn't have required documents |
| `UNSUITABLE_ENV` | On Video Ident call user is either not alone or nor visible |
| `CONNECTION_INTERRUPTED` | Video Ident call connection was interrupted |
| `UNSUPPORTED_LANGUAGE` | Video Ident user do not speak language common to operator |
| `THIRD_PARTY_INVOLVED` | Video Ident user trying to pass verification to pass account to a third party |
| `INCORRECT_SOCIAL_NUMBER` | Incorrect TIN/SSN was provided to perform the check |
| `CHECK_UNAVAILABLE` | External database service is not available at the moment |
| `DB_DATA_NOT_FOUND` | Data not found in external database |
| `DB_DATA_MISMATCH` | Input data/doc does not match data from external database |
| `DB_NO_DATA_SOURCE` | Input data is not supported by any enabled source |
| `ESIGN_FAILED` | E-Sign failed, most likely due personal info mismatch. Required to retry QES flow |
| `RESTRICTED_PERSON` | Person is found in a restricted list (ex. Prohibited from betting) |
| `NO_APPLICANT` | Applicant could not join the call |
| `NO_SUITABLE_DOCS` | Applicant couldn't provide a suitable document. |
| `NOT_ALONE` | Applicant was not alone. |
| `CONNECTION_ISSUES` | Applicant had unsuitable internet connection. |
| `CAMERA_OR_LIGHTING_ISSUES` | Applicant had unsuitable camera or lighting conditions. |
| `SOUND_ISSUES` | Applicant had audio input/output device settings issues. |
| `PHONE_VERIFICATION_ISSUES` | Applicant was not able to complete TAN step. |
| `OTHER_VI_ISSUES` | Applicant needs to call back later, wasn't prepared or able to continue now. |
| `REFUSED_TO_CONTINUE` | Applicant refused to continue verification call. |
| `VIDEO_FILTERS_OR_MASKS` | Video filters have been applied. |
| `SUPPORTED_LANGUAGE_IS_NOT_AVAILABLE` | Applicant couldn't proceed on selected language. |
| `ADDITIONAL_DATA_REQUIRED` | Additional data is required to complete VI verification. |
| `VI_ATTEMPTS_LIMIT_REACHED` | VI attempts limit reached. |
| `BEHAVIOR` | Applicant demonstrated inappropriate response to the procedure requirements and/or called being in a condition not suitable to complete verification successfully. |
| `PERSON_MISMATCH` | Video call initiated not by application data holder. |
| `THIRD_PARTY_GUIDANCE` | Applicant was misled/forced to create this account by a third party. |
| `SPONSORED_VERIFICATION` | Applicant suspected in paid account opening. |
| `INSUFFICIENT_DATA` | FraudNetworks label Insufficient data to make a determination. |
| `INCORRECT_PATTERNS` | FraudNetworks label Network patterns incorrectly identified. |
### <a name="EmailRiskLabel"></a>`Elements of applicant.riskLabels.email`
| Value | Description |
| --- | --- |
| `mediumRisk` | Medium-risk email address. |
| `highRisk` | High-risk email address. |
| `disposable` | Temporary email address which is provided by a disposable email service and usually expires in a few minutes. |
| `noWebRegistrations` | Email registration is not detected. |
| `noWebsiteExists` | Email domain does not exist. |
| `nonDeliverable` | Messages fail to be delivered to this email address. |
| `blocklisted` | |
| `invalidEmail` | Email address is invalid |
| `gibberish` | Email address is gibberish. Like 1hasdhjelsf@gmail.com |
| `freshEmail` | Email's First Seen date is recent — fresh email with short digital footprint history. |
### <a name="PhoneRiskLabel"></a>`Elements of applicant.riskLabels.phone`
| Value | Description |
| --- | --- |
| `mediumRisk` | Medium-risk phone number. |
| `highRisk` | High-risk phone number. |
| `virtual` | Virtual phone that allows a user to make calls through the internet and is not associated with a physical location. |
| `noWebRegistrations` | Phone number registration is not detected. |
| `blocklisted` | |
| `disposable` | Disposable phone. |
| `freshPhone` | Phone's First Seen date is recent — fresh phone number with short digital footprint history. |
| `phoneCountryVsApplicantCountryMismatch` | Country of phone number mismatches the applicant country |
| `phoneCountryVsIpCountryMismatch` | The phone number country does not match the IP address country |
| `phoneCountryVsAddressCountryMismatch` | The phone number country does not match the physical address country |
| `phoneCountryVsEmailDomainCountryMismatch` | The phone number country does not match the email domain country |
| `phoneCountryVsCompanyCountryMismatch` | The phone number country does not match the company country |
### <a name="DeviceRiskLabel"></a>`Elements of applicant.riskLabels.device`
| Value | Description |
| --- | --- |
| `vpnUsage` | VPN usage is detected. |
| `torUsage` | TOR usage is detected. |
| `highRiskIp` | High risk of used IP addresses. |
| `multipleDevices` | Multiple devices were used. |
| `multipleMobileDevices` | Multiple mobile devices were used. |
| `lengthySession` | The session is too long. |
| `quickSession` | The session was quick, probably automation. |
| `failedSessionContinuation` | The session was interrupted. |
| `distantIpLocations` | Login from different and distant IP addresses for a short time interval. |
| `thirdPartyLinkAccess` | Link access via external source, e.g. WhatsApp or Telegram |
| `riskySessionContinuation` | Continuation of the session from a risky IP when link was failed to be opened or accessed from a messanger |
| `nightTimeActivity` | Activity was performed during night hours (00:00–06:00) in the client's timezone. |
| `manyApplicantsSameDevice` | Device was used by multiple applicants |
### <a name="AntifraudDeviceCheckRiskLabel"></a>`Elements of applicant.riskLabels.deviceCheck`
| Value | Description |
| --- | --- |
| `badBot` | |
| `tampering` | |
| `virtualMachine` | |
| `privacySettingsMode` | |
| `factoryReset` | |
| `rooted` | |
| `emulator` | |
| `clonedApp` | |
| `jailbroken` | |
| `fridaTool` | |
| `locationSpoofing` | |
| `mitmAttack` | |
| `goodBot` | |
| `incognito` | |
| `developerTools` | |
| `highActivity` | |
| `adblock` | |
### <a name="CrossCheckRiskLabel"></a>`Elements of applicant.riskLabels.crossCheck`
| Value | Description |
| --- | --- |
| `diverseIdDocCountries` | ID documents issued in different countries. |
| `manyAccountDuplicates` | Lots of account duplicates are created. |
| `accountsInManyServices` | The same account is registered in different services. |
| `addressCountryVsIpCountryMismatch` | Phisical address in the country mismatches the country IP address. |
| `idDocCountryVsIpCountryMismatch` | ID document country mismatches the country IP address. |
| `exifCountryVsIdDocCountryOrIpCountryMismatch` | The country detected by EXIF mismatches either the document country or the country IP address. |
| `ipLocationVsTimezoneMismatch` | Checks whether ip location timezone different from the browser timezone |
| `browserLanguageMismatch` | Language of the browser does not match the language of the country IP address or id doc |
| `emailDomainCountryMismatch` | Email domain mismatches known countries for applicants |
| `strongLinkToFraudulentApplicants` | Applicant is strongly linked (Fraud Networks, Duplicate Search) to other applicants rejected for fraud |
| `potentialLinkToFraudulentApplicants` | Applicant is potentially linked (Fraud Networks, Duplicate Search) to other applicants rejected for fraud |
### <a name="SelfieRiskLabel"></a>`Elements of applicant.riskLabels.selfie`
| Value | Description |
| --- | --- |
| `asleep` | The person in the selfie is actually asleep. |
| `forced` | The person is coerced into verification @deprecated use #thirdPartyInvolved instead |
| `multipleFaces` | Multiple faces are present. @deprecated use #thirdPartyInvolved instead |
| `estimatedAgeMismatch` | Estimated age mismatches the age in documents. |
| `virtualCameraPresent` | Virtual (a software-based) camera that simulates a physical camera is detected. |
| `manyAttempts` | Numerous attempts of passing a selfie check. |
| `sameFaceWithDifferentData` | Same face on documents with different data. |
| `thirdPartyInvolved` | Suspected third-party involvement, e.g., another person assisting or holding the applicant |
| `phone` | Person is using a phone during the selfie capture process |
### <a name="AmlRiskLabel"></a>`Elements of applicant.riskLabels.aml`
| Value | Description |
| --- | --- |
| `pep` | The screened entity belongs to the PEP (Politically Exposed Person) category. |
| `sanctions` | The screened entity was found in sanctions lists. |
| `terrorism` | The screened entity is suspected of terrorism. |
| `crime` | The screened entity is suspected of criminal activity. |
| `adverseMedia` | The compromising published information that is related to the user was found in the media. |
| `fitnessProbity` | The screened entity does not comply with Fitness and Probity regime. The core function of the Fitness and Probity Regime is to ensure that individuals in key and customer facing positions are competent and capable |
### <a name="PersonRiskLabel"></a>`Elements of applicant.riskLabels.person`
| Value | Description |
| --- | --- |
| `famousPerson` | The user is supposedly a famous person. |
| `strangeName` | The user has a strange name that does not seem to be a real one. |
| `noPhoneNamesFromWebServices` | No phone names are found in web services. |
| `phoneNameMismatchFromWebServices` | Name mismatch with the names associated with the phone number. |
| `noEmailNamesFromWebServices` | No email names are found in web services. |
| `emailNameMismatchFromWebServices` | Name mismatch with the names associated with the email address. |
| `manyUniquePersonsLinkedToContactData` | The contact data (email or phone) is linked to an anomalously large number of distinct unrelated identities, indicating potential large-scale fake identity creation or multi-accounting. |
### <a name="CompanyRiskLabel"></a>`Elements of applicant.riskLabels.company`
| Value | Description |
| --- | --- |
| `companyAdditionalDataNotFound` | Additional company fields are absent in the database |
| `companyDataMismatch` | Mismatch of additional company fields in the database |
| `companyDocumentMissedRequiredField` | If a field is required for the doc type but missed Required fields: CompanyCrossCheckHelper#REQUIRED_FIELDS ArbitraryDoc config: KybArbitraryDocOcrMapping |
| `companyDocumentDataMismatch` | Some field on the document doesn't match the database ArbitraryDoc config: KybArbitraryDocOcrMapping |
| `companyOwnershipDataNotFound` | Company Ownership data (Info on Persons with significant control) is absent in the reference database. |
| `companyBeneficialOwnershipDataNotFound` | Company Ultimate Beneficial Ownership data is absent in the reference database |
| `companyOfficersDataNotFound` | Company Officers data is absent in the reference database |
| `companyDocumentGraphicEditor` | Company document metadata contains blacklisted graphic editors |
| `companyAddressGeoRegistryMismatch` | |
| `companyAssociatedPartyDataMismatch` | Some of non-critical provided beneficiary data (country, shareSize) does not match the database |
| `companyHasBeneficiaryRejected` | One (or more) of the beneficiaries got final rejection. Commonly used with disabled auto-rejection in GS. KybIntegrationSettings#rejectCompanyWhenBeneficiaryRejected |
### <a name="ApplicantAssessmentResultExpressionData"></a>`Elements of applicant.assessment.scores`
| Field | Type | Description |
| --- | --- | --- |
| <a name="ApplicantAssessmentResultExpressionData.tag"></a>`tag` | `String` | Applicant tag. |
| <a name="ApplicantAssessmentResultExpressionData.score"></a>`score` | `Float` | Applicant score. |
### <a name="BackgroundCheckViolation"></a>`Elements of mrz`
Violations that may occur during:
<ul>
<li>cross validation of the applicant and their info, documents</li>
<li>document validation</li>
</ul>
| Value | Description |
| --- | --- |
| `BDATE_MISMATCH` | |
| `ISSUED_DATE_MISMATCH` | |
| `NAME_MISMATCH` | |
| `PHONE_MISMATCH` | |
| `GENDER_MISMATCH` | |
| `NO_APPLICANT_DATA` | |
| `COMPANY_REGISTRATION_NUMBER_MISMATCH` | |
| `TIN_MISMATCH` | |
| `NOT_ALL_FIELDS_RECOGNIZED` | |
| `DOC_EXPIRES_SOON` | |
| `DOC_EXPIRED` | |
| `EXPIRATION_DATE_MISMATCH` | |
| `INCONSISTENT_MRZ` | |
| `MRZ_PARSING_ERROR` | |
| `BAD_MRZ_DOB` | |
| `BAD_MRZ_EXP_DATE` | |
| `BAD_MRZ_NUMBER` | |
| `MRZ_DATA_MISMATCH` | |
| `MRZ_NUM_MISMATCH` | |
| `MRZ_ADDITIONAL_NUMBER_MISMATCH` | |
| `MRZ_DATE_MISMATCH` | |
| `MRZ_DOB_MISMATCH` | |
| `MRZ_ISSUED_DATE_MISMATCH` | |
| `MRZ_FIRST_ISSUED_DATE_MISMATCH` | |
| `MRZ_EXPIRY_DATE_MISMATCH` | |
| `MRZ_NAME_MISMATCH` | |
| `MRZ_COUNTRY_MISMATCH` | |
| `MRZ_AUTHORITY_CODE_MISMATCH` | |
| `IMAGE_SHOULD_BE_MRZ_DOCUMENT_ERROR` | |
| `IMAGE_SAME_SIDES_ERROR` | |
| `INCONSISTENT_BARCODE` | |
| `BARCODE_PARSING_ERROR` | |
| `BARCODE_DATA_MISMATCH` | |
| `BARCODE_NUM_MISMATCH` | |
| `BARCODE_DATE_MISMATCH` | |
| `BARCODE_NAME_MISMATCH` | |
| `BARCODE_COUNTRY_MISMATCH` | |
| `BARCODE_GENDER_MISMATCH` | |
| `BARCODE_ADDITIONAL_NUMBER_MISMATCH` | |
| `INVALID_DOC_NUMBER` | |
| `INVALID_EXPIRATION_DATE` | |
| `INVALID_ADDITIONAL_NUMBER` | |
| `BDATE_ADDITIONAL_NUMBER_MISMATCH` | |
| `BDATE_NUMBER_MISMATCH` | |
| `GENDER_ADDITIONAL_NUMBER_MISMATCH` | |
| `NAME_NUMBER_MISMATCH` | |
| `ADDRESS_MISMATCH` | |
| `NFC_MRZ_MISMATCH` | |
| `NFC_CERT_MISMATCH` | |
| `NFC_INFO_MISSED` | |
| `DEAD` | Person is marked as dead (used in external bg checks) |
| `PERSON_IS_MINOR` | Person is marked as minor (used in external bg checks) |
| `DOCUMENT_LOST` | |
| `DATA_NOT_FOUND` | |
| `FALSE_IDENTITY` | |
| `FALSE_IDENTITY_DOCUMENT` | |
| `INVALID_STATUS` | |
| `SELFIE_MISMATCH` | |
| `RESTRICTED_LIST_HIT` | |
| `NOT_ENOUGH_DATA` | |
| `CATEGORY_MISMATCH` | |
| `DRIVING_RESTRICTIONS` | |
| `EXTERNAL_DB_SUSPICIOUS` | |
| `INVALID_ID_STATUS` | |
| `VERIFICATION_REQUIREMENTS_NOT_MET` | The database check results don't meet verification requirements. Only used when the database check has some composite/complex requirements (ex. found record is 36 months old or found 2 records that are 6 months old) |
| `AUTHENTICATION_FAILED` | |
| `ID_NUMBER_MISMATCH` | |
| `ACCOUNT_TYPE_MISMATCH` | |
| `ACCOUNT_NOT_FOUND` | |
| `ACCOUNT_NOT_OPEN` | |
### <a name="MediaTypeId"></a>`poa.image.mimeType, poa2.image.mimeType`
Created by aspotashev on 12/12/14.
| Value | Description |
| --- | --- |
| `PDF` | |
| `HEIF` | |
| `JPEG` | |
| `PNG` | |
| `GIF` | |
| `TIFF` | |
| `WEBP` | |
| `JP2` | |
| `YAML` | |
| `JSON` | |
| `XML` | |
| `BMP` | |
| `VIDEO` | |
| `CSV` | |
| `ZIP` | |
| `UNKNOWN` | |
### <a name="AllIpChecksExpressionData"></a>`checks.all.ip`
| Field | Type | Description |
| --- | --- | --- |
| <a name="AllIpChecksExpressionData.ips"></a>`ips` | List of `String`-s | |
| <a name="AllIpChecksExpressionData.stateCodes"></a>`stateCodes` | List of `String`-s | |
| <a name="AllIpChecksExpressionData.asnOrgs"></a>`asnOrgs` | List of `String`-s | |
| <a name="AllIpChecksExpressionData.orgs"></a>`orgs` | List of `String`-s | |
| <a name="AllIpChecksExpressionData.connectionTypes"></a>`connectionTypes` | List of [`Enum`](#IpConnectionType)-s | |
| <a name="AllIpChecksExpressionData.countries"></a>`countries` | List of `String`-s | Detected countries from all IP checks (ISO 3166-1 alpha-3) |
| <a name="AllIpChecksExpressionData.vpns"></a>`vpns` | List of [`Enum`](#ImageTestAnswer)-s | VPN answers from all IP checks |
| <a name="AllIpChecksExpressionData.tors"></a>`tors` | List of [`Enum`](#ImageTestAnswer)-s | TOR answers from all IP checks |
| <a name="AllIpChecksExpressionData.riskLevels"></a>`riskLevels` | List of [`Enum`](#ImageTestAnswer)-s | Risk levels from all IP checks |
### <a name="PoaCompanyContactType"></a>`checks.poa.companyType, checks.poa2.companyType`
The main types of companies that issue proof of address documents.
NB: We have promised our clients that these types will not be changed and no new value can be added
Subtypes (PoaSubType) are used for detailing. Subtypes can be added, but cannot be removed.
| Value | Description |
| --- | --- |
| `governmentOrganization` | |
| `utilityProvider` | |
| `bank` | |
| `mobileOperator` | |
| `other` | |
### <a name="PoaSubType"></a>`subType, Elements of possibleSubTypes`
Extended POA subtypes. New values can be added. Is a separate service: ADVANCED_POA_TYPE_DETECTION
| Value | Description |
| --- | --- |
| `statement` | |
| `voterRegistration` | |
| `taxBill` | |
| `telecom` | |
| `utilityBill` | |
| `bankStatement` | |
| `bankLetter` | |
| `lease` | |
| `universityLetter` | |
| `employmentLetter` | |
### <a name="BgCheckExtractedExpressionData"></a>`checks.ekyc.extractedData`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BgCheckExtractedExpressionData.crossCheckNameData"></a>`crossCheckNameData` | [`Object`](#CrossCheckNameData) | Data from the document that we use for cross-validation |
| <a name="BgCheckExtractedExpressionData.dob"></a>`dob` | [`Date`](#DateExpressionData) | Date of birth |
| <a name="BgCheckExtractedExpressionData.gender"></a>`gender` | `String` | Gender (M or F) |
| <a name="BgCheckExtractedExpressionData.address"></a>`address` | [`Object`](#AddressExpressionData) | ID Document address |
| <a name="BgCheckExtractedExpressionData.additionalFields"></a>`additionalFields` | [`Object`](#AdditionalFieldsExpressionData) | Additional fields |
| <a name="BgCheckExtractedExpressionData.number"></a>`number` | `String` | Extracted ID document number |
### <a name="CompanyCheckInfoExpressionData"></a>`checks.company.info`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyCheckInfoExpressionData.status"></a>`status` | `String` | Company status. |
| <a name="CompanyCheckInfoExpressionData.type"></a>`type` | `String` | Company type. |
| <a name="CompanyCheckInfoExpressionData.registeredCapitalAmount"></a>`registeredCapitalAmount` | `Object` | Registered capital of the company. |
| <a name="CompanyCheckInfoExpressionData.employeesNumber"></a>`employeesNumber` | `Integer` | Approximate number of employees. |
| <a name="CompanyCheckInfoExpressionData.industryCode"></a>`industryCode` | [`Object`](#IndustryCodeExpressionData) | List of industry codes and descriptions. |
| <a name="CompanyCheckInfoExpressionData.incorporatedOn"></a>`incorporatedOn` | [`Date`](#DateExpressionData) | Date of incorporation. |
| <a name="CompanyCheckInfoExpressionData.startDate"></a>`startDate` | [`Date`](#DateExpressionData) | Start date |
| <a name="CompanyCheckInfoExpressionData.legalForm"></a>`legalForm` | `String` | Company legal form |
| <a name="CompanyCheckInfoExpressionData.licenseInfo"></a>`licenseInfo` | [`Object`](#CompanyLicenseInfoExpressionData) | Company license info. |
### <a name="PaymentSourceInfoExpressionData"></a>`checks.paymentSource.extractedInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PaymentSourceInfoExpressionData.type"></a>`type` | [`Enum`](#PaymentSourceType) | Payment method type |
| <a name="PaymentSourceInfoExpressionData.accountIdentifier"></a>`accountIdentifier` | `String` | Account identifier |
| <a name="PaymentSourceInfoExpressionData.institutionName"></a>`institutionName` | `String` | Name of the institution issued payment method |
| <a name="PaymentSourceInfoExpressionData.issuedDate"></a>`issuedDate` | [`Date`](#DateExpressionData) | Document issue date |
### <a name="PaymentSourceRiskCheckExpressionData"></a>`checks.paymentSource.riskCheck`
| Field | Type | Description |
| --- | --- | --- |
| <a name="PaymentSourceRiskCheckExpressionData.binInfo"></a>`binInfo` | [`Object`](#BinInfoExpressionData) | |
### <a name="NfcValidationExpressionData"></a>`checks.nfcCheck.validation`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcValidationExpressionData.activeAuthenticationPassed"></a>`activeAuthenticationPassed` | `Boolean` | |
| <a name="NfcValidationExpressionData.certificateSelfCheckPassed"></a>`certificateSelfCheckPassed` | `Boolean` | |
| <a name="NfcValidationExpressionData.certificateMasterListCheckPassed"></a>`certificateMasterListCheckPassed` | `Boolean` | |
| <a name="NfcValidationExpressionData.mrzCheckPassed"></a>`mrzCheckPassed` | `Boolean` | |
| <a name="NfcValidationExpressionData.imageCheckPassed"></a>`imageCheckPassed` | `Boolean` | |
### <a name="NfcExtractedDataExpressionData"></a>`checks.nfcCheck.extractedData`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcExtractedDataExpressionData.mrzInfo"></a>`mrzInfo` | [`Object`](#NfcExtractedDataMrzInfoExpressionData) | |
| <a name="NfcExtractedDataExpressionData.documentInfo"></a>`documentInfo` | [`Object`](#NfcExtractedDataDocumentInfoExpressionData) | |
| <a name="NfcExtractedDataExpressionData.verificationData"></a>`verificationData` | [`Object`](#NfcExtractedDataVerificationDataExpressionData) | |
### <a name="CrossValidationCheckExpressionData"></a>`action.checks.crossValidation`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CrossValidationCheckExpressionData.violations"></a>`violations` | List of `String`-s | |
### <a name="BeneficiaryStatsExpressionData"></a>`beneficiaryStats`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BeneficiaryStatsExpressionData.rejectLabels"></a>`rejectLabels` | List of `String`-s | Beneficiary applicant reject labels |
| <a name="BeneficiaryStatsExpressionData.tags"></a>`tags` | List of `String`-s | Beneficiary applicant tags |
| <a name="BeneficiaryStatsExpressionData.riskLabels"></a>`riskLabels` | [`Object`](#ApplicantRiskLabels) | Beneficiary applicant risk labels |
| <a name="BeneficiaryStatsExpressionData.counts"></a>`counts` | [`Object`](#BeneficiaryCountsExpressionData) | |
### <a name="UpcomingDocumentExpirationExpressionData"></a>`upcomingDocumentExpiration`
| Field | Type | Description |
| --- | --- | --- |
| <a name="UpcomingDocumentExpirationExpressionData.idDocType"></a>`idDocType` | `String` | Static value "COMPANY_DOC" for all the Company-related documents |
| <a name="UpcomingDocumentExpirationExpressionData.idDocSubType"></a>`idDocSubType` | `String` | Specific type of company document |
| <a name="UpcomingDocumentExpirationExpressionData.expirationDate"></a>`expirationDate` | [`Date`](#DateExpressionData) | Date of company document expiration |
### <a name="DeviceCheckRiskLabel"></a>`applicant.riskLabels.deviceCheck[].riskLabel`
| Value | Description |
| --- | --- |
| `rooted` | |
| `emulator` | |
| `badBot` | |
| `tampering` | |
| `clonedApp` | |
| `jailbroken` | |
| `fridaTool` | |
| `virtualMachine` | |
| `locationSpoofing` | |
| `mitmAttack` | |
| `privacySettingsMode` | |
| `goodBot` | |
| `incognito` | |
| `highActivity` | |
| `developerTools` | |
| `adblock` | |
| `factoryReset` | |
### <a name="IpConnectionType"></a>`Elements of checks.all.ip.connectionTypes`
| Value | Description |
| --- | --- |
| `residential` | |
| `cellular` | |
| `business` | |
| `hosting` | |
| `government` | |
| `educational` | |
### <a name="AdditionalFieldsExpressionData"></a>`checks.ekyc.extractedData.additionalFields`
| Field | Type | Description |
| --- | --- | --- |
| <a name="AdditionalFieldsExpressionData.phone"></a>`phone` | [`Object`](#PhoneExpressionData) | |
### <a name="IndustryCodeExpressionData"></a>`checks.company.info.industryCode`
| Field | Type | Description |
| --- | --- | --- |
| <a name="IndustryCodeExpressionData.codes"></a>`codes` | List of `String`-s | List of Company industry codes. |
| <a name="IndustryCodeExpressionData.descriptions"></a>`descriptions` | List of `String`-s | List of Industry descriptions. |
### <a name="CompanyLicenseInfoExpressionData"></a>`checks.company.info.licenseInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="CompanyLicenseInfoExpressionData.issuedDate"></a>`issuedDate` | [`Date`](#DateExpressionData) | Date of issue. |
| <a name="CompanyLicenseInfoExpressionData.validUntil"></a>`validUntil` | [`Date`](#DateExpressionData) | Date of expiry. |
### <a name="PaymentSourceType"></a>`type`
| Value | Description |
| --- | --- |
| `bankCard` | |
| `bankStatement` | |
| `eWallet` | |
| `cryptoWallet` | |
### <a name="BinInfoExpressionData"></a>`checks.paymentSource.riskCheck.binInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BinInfoExpressionData.country"></a>`country` | `String` | |
| <a name="BinInfoExpressionData.issuer"></a>`issuer` | `String` | |
| <a name="BinInfoExpressionData.brand"></a>`brand` | `String` | |
| <a name="BinInfoExpressionData.type"></a>`type` | `String` | |
| <a name="BinInfoExpressionData.prepaid"></a>`prepaid` | `Boolean` | |
| <a name="BinInfoExpressionData.virtual"></a>`virtual` | `Boolean` | |
| <a name="BinInfoExpressionData.commercial"></a>`commercial` | `Boolean` | |
### <a name="NfcExtractedDataMrzInfoExpressionData"></a>`checks.nfcCheck.extractedData.mrzInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcExtractedDataMrzInfoExpressionData.fullMrz"></a>`fullMrz` | `String` | |
| <a name="NfcExtractedDataMrzInfoExpressionData.dateOfExpiration"></a>`dateOfExpiration` | [`Date`](#DateExpressionData) | |
| <a name="NfcExtractedDataMrzInfoExpressionData.documentNumber"></a>`documentNumber` | `String` | |
| <a name="NfcExtractedDataMrzInfoExpressionData.issuingState"></a>`issuingState` | `String` | |
| <a name="NfcExtractedDataMrzInfoExpressionData.nationality"></a>`nationality` | `String` | |
| <a name="NfcExtractedDataMrzInfoExpressionData.identifier"></a>`identifier` | `String` | |
| <a name="NfcExtractedDataMrzInfoExpressionData.dob"></a>`dob` | [`Date`](#DateExpressionData) | |
| <a name="NfcExtractedDataMrzInfoExpressionData.gender"></a>`gender` | `String` | |
### <a name="NfcExtractedDataDocumentInfoExpressionData"></a>`checks.nfcCheck.extractedData.documentInfo`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcExtractedDataDocumentInfoExpressionData.nameOfHolder"></a>`nameOfHolder` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.otherNames"></a>`otherNames` | List of `String`-s | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.personalNumber"></a>`personalNumber` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.fullDateOfBirth"></a>`fullDateOfBirth` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.placeOfBirth"></a>`placeOfBirth` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.permanentAddress"></a>`permanentAddress` | List of `String`-s | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.telephone"></a>`telephone` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.profession"></a>`profession` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.title"></a>`title` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.personalSummary"></a>`personalSummary` | `String` | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.otherValidTDNumbers"></a>`otherValidTDNumbers` | List of `String`-s | |
| <a name="NfcExtractedDataDocumentInfoExpressionData.custodyInformation"></a>`custodyInformation` | `String` | |
### <a name="NfcExtractedDataVerificationDataExpressionData"></a>`checks.nfcCheck.extractedData.verificationData`
| Field | Type | Description |
| --- | --- | --- |
| <a name="NfcExtractedDataVerificationDataExpressionData.issuingAuthority"></a>`issuingAuthority` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.dateOfIssue"></a>`dateOfIssue` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.namesOfOtherPersons"></a>`namesOfOtherPersons` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.endorsementsAndObservations"></a>`endorsementsAndObservations` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.taxOrExitRequirements"></a>`taxOrExitRequirements` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.dateAndTimeOfPersonalization"></a>`dateAndTimeOfPersonalization` | `String` | |
| <a name="NfcExtractedDataVerificationDataExpressionData.personalizationSystemSerialNumber"></a>`personalizationSystemSerialNumber` | `String` | |
### <a name="BeneficiaryCountsExpressionData"></a>`counts`
| Field | Type | Description |
| --- | --- | --- |
| <a name="BeneficiaryCountsExpressionData.ubos"></a>`ubos` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.shareholders"></a>`shareholders` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.representatives"></a>`representatives` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.directors"></a>`directors` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.companyOfficers"></a>`companyOfficers` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.investors"></a>`investors` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.secretaries"></a>`secretaries` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.founders"></a>`founders` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.legalAdvisors"></a>`legalAdvisors` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.authorizedSignatories"></a>`authorizedSignatories` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.trusties"></a>`trusties` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.trustBeneficiaries"></a>`trustBeneficiaries` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.trustSettlors"></a>`trustSettlors` | `Integer` | |
| <a name="BeneficiaryCountsExpressionData.trustProtectors"></a>`trustProtectors` | `Integer` | |
## Index
- [`applicant`](#WorkflowExpressionContext.applicant).[`allMemberRoles`](#ApplicantExpressionData.allMemberRoles)
- [`applicant`](#WorkflowExpressionContext.applicant).[`lang`](#ApplicantExpressionData.lang)
- [`applicant`](#WorkflowExpressionContext.applicant).[`type`](#ApplicantExpressionData.type)
- [`applicant`](#WorkflowExpressionContext.applicant).[`emailDomain`](#ApplicantExpressionData.emailDomain)
- [`applicant`](#WorkflowExpressionContext.applicant).[`phone`](#ApplicantExpressionData.phone).[`country`](#PhoneExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`phone`](#ApplicantExpressionData.phone).[`number`](#PhoneExpressionData.number)
- [`applicant`](#WorkflowExpressionContext.applicant).[`email`](#ApplicantExpressionData.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`assessment`](#ApplicantExpressionData.assessment).[`scores["..."]`](#ApplicantAssessmentExpressionData.scores).[`score`](#ApplicantAssessmentResultExpressionData.score)
- [`applicant`](#WorkflowExpressionContext.applicant).[`assessment`](#ApplicantExpressionData.assessment).[`scores["..."]`](#ApplicantAssessmentExpressionData.scores).[`tag`](#ApplicantAssessmentResultExpressionData.tag)
- [`applicant`](#WorkflowExpressionContext.applicant).[`assessment`](#ApplicantExpressionData.assessment).[`totalScore`](#ApplicantAssessmentExpressionData.totalScore)
- [`applicant`](#WorkflowExpressionContext.applicant).[`tags`](#ApplicantExpressionData.tags)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`company`](#ApplicantRiskLabels.company)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`person`](#ApplicantRiskLabels.person)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`aml`](#ApplicantRiskLabels.aml)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`selfie`](#ApplicantRiskLabels.selfie)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`crossCheck`](#ApplicantRiskLabels.crossCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`deviceCheck`](#ApplicantRiskLabels.deviceCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`device`](#ApplicantRiskLabels.device)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`phone`](#ApplicantRiskLabels.phone)
- [`applicant`](#WorkflowExpressionContext.applicant).[`riskLabels`](#ApplicantExpressionData.riskLabels).[`email`](#ApplicantRiskLabels.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`metadata`](#ApplicantExpressionData.metadata)
- [`applicant`](#WorkflowExpressionContext.applicant).[`derivatives`](#ApplicantExpressionData.derivatives).[`estimatedAge`](#ApplicantDerivatives.estimatedAge)
- [`applicant`](#WorkflowExpressionContext.applicant).[`sourceKey`](#ApplicantExpressionData.sourceKey)
- [`applicant`](#WorkflowExpressionContext.applicant).[`review`](#ApplicantExpressionData.review).[`buttonIds`](#InspectionReviewExpressionData.buttonIds)
- [`applicant`](#WorkflowExpressionContext.applicant).[`review`](#ApplicantExpressionData.review).[`rejectLabels`](#InspectionReviewExpressionData.rejectLabels)
- [`applicant`](#WorkflowExpressionContext.applicant).[`review`](#ApplicantExpressionData.review).[`attemptCnt`](#InspectionReviewExpressionData.attemptCnt)
- [`applicant`](#WorkflowExpressionContext.applicant).[`review`](#ApplicantExpressionData.review).[`levelName`](#InspectionReviewExpressionData.levelName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`phone`](#ApplicantInfoExpressionData.phone).[`country`](#PhoneExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`phone`](#ApplicantInfoExpressionData.phone).[`number`](#PhoneExpressionData.number)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`tin`](#ApplicantInfoExpressionData.tin)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`tinCountries`](#ApplicantInfoExpressionData.tinCountries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocSubType`](#UpcomingDocumentExpirationExpressionData.idDocSubType)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocType`](#UpcomingDocumentExpirationExpressionData.idDocType)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustProtectors`](#BeneficiaryCountsExpressionData.trustProtectors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustSettlors`](#BeneficiaryCountsExpressionData.trustSettlors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustBeneficiaries`](#BeneficiaryCountsExpressionData.trustBeneficiaries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trusties`](#BeneficiaryCountsExpressionData.trusties)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`authorizedSignatories`](#BeneficiaryCountsExpressionData.authorizedSignatories)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`legalAdvisors`](#BeneficiaryCountsExpressionData.legalAdvisors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`founders`](#BeneficiaryCountsExpressionData.founders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`secretaries`](#BeneficiaryCountsExpressionData.secretaries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`investors`](#BeneficiaryCountsExpressionData.investors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`companyOfficers`](#BeneficiaryCountsExpressionData.companyOfficers)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`directors`](#BeneficiaryCountsExpressionData.directors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`representatives`](#BeneficiaryCountsExpressionData.representatives)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`shareholders`](#BeneficiaryCountsExpressionData.shareholders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`ubos`](#BeneficiaryCountsExpressionData.ubos)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`company`](#ApplicantRiskLabels.company)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`person`](#ApplicantRiskLabels.person)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`aml`](#ApplicantRiskLabels.aml)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`selfie`](#ApplicantRiskLabels.selfie)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`crossCheck`](#ApplicantRiskLabels.crossCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`deviceCheck`](#ApplicantRiskLabels.deviceCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`device`](#ApplicantRiskLabels.device)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`phone`](#ApplicantRiskLabels.phone)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`email`](#ApplicantRiskLabels.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`tags`](#BeneficiaryStatsExpressionData.tags)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`rejectLabels`](#BeneficiaryStatsExpressionData.rejectLabels)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`ownershipStructureDepth`](#CompanyInfoExpressionData.ownershipStructureDepth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`skippedTypes`](#CompanyInfoExpressionData.skippedTypes)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiallyHeld`](#CompanyInfoExpressionData.beneficiallyHeld)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noShareholders`](#CompanyInfoExpressionData.noShareholders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noUBOs`](#CompanyInfoExpressionData.noUBOs)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`website`](#CompanyInfoExpressionData.website)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`taxId`](#CompanyInfoExpressionData.taxId)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`phone`](#CompanyInfoExpressionData.phone)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`email`](#CompanyInfoExpressionData.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporatedOn`](#CompanyInfoExpressionData.incorporatedOn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationLocation`](#CompanyInfoExpressionData.registrationLocation)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`postalAddress`](#CompanyInfoExpressionData.postalAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalAddress`](#CompanyInfoExpressionData.legalAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`leiCode`](#CompanyInfoExpressionData.leiCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationNumber`](#CompanyInfoExpressionData.registrationNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`companyName`](#CompanyInfoExpressionData.companyName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalForm`](#CompanyInfoExpressionData.legalForm)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`type`](#CompanyInfoExpressionData.type)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`country`](#CompanyInfoExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`age`](#ApplicantInfoExpressionData.age)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`residenceCountry`](#ApplicantInfoExpressionData.residenceCountry)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`taxResidenceCountry`](#ApplicantInfoExpressionData.taxResidenceCountry)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`nationality`](#ApplicantInfoExpressionData.nationality)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`gender`](#ApplicantInfoExpressionData.gender)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`lastNameEn`](#ApplicantInfoExpressionData.lastNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`lastName`](#ApplicantInfoExpressionData.lastName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`middleNameEn`](#ApplicantInfoExpressionData.middleNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`middleName`](#ApplicantInfoExpressionData.middleName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`firstNameEn`](#ApplicantInfoExpressionData.firstNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`firstName`](#ApplicantInfoExpressionData.firstName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`countryOfBirth`](#ApplicantInfoExpressionData.countryOfBirth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`country`](#ApplicantInfoExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fixedInfo`](#ApplicantExpressionData.fixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`phone`](#ApplicantInfoExpressionData.phone).[`country`](#PhoneExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`phone`](#ApplicantInfoExpressionData.phone).[`number`](#PhoneExpressionData.number)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`tin`](#ApplicantInfoExpressionData.tin)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`tinCountries`](#ApplicantInfoExpressionData.tinCountries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocSubType`](#UpcomingDocumentExpirationExpressionData.idDocSubType)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocType`](#UpcomingDocumentExpirationExpressionData.idDocType)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustProtectors`](#BeneficiaryCountsExpressionData.trustProtectors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustSettlors`](#BeneficiaryCountsExpressionData.trustSettlors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustBeneficiaries`](#BeneficiaryCountsExpressionData.trustBeneficiaries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trusties`](#BeneficiaryCountsExpressionData.trusties)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`authorizedSignatories`](#BeneficiaryCountsExpressionData.authorizedSignatories)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`legalAdvisors`](#BeneficiaryCountsExpressionData.legalAdvisors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`founders`](#BeneficiaryCountsExpressionData.founders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`secretaries`](#BeneficiaryCountsExpressionData.secretaries)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`investors`](#BeneficiaryCountsExpressionData.investors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`companyOfficers`](#BeneficiaryCountsExpressionData.companyOfficers)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`directors`](#BeneficiaryCountsExpressionData.directors)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`representatives`](#BeneficiaryCountsExpressionData.representatives)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`shareholders`](#BeneficiaryCountsExpressionData.shareholders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`ubos`](#BeneficiaryCountsExpressionData.ubos)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`company`](#ApplicantRiskLabels.company)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`person`](#ApplicantRiskLabels.person)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`aml`](#ApplicantRiskLabels.aml)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`selfie`](#ApplicantRiskLabels.selfie)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`crossCheck`](#ApplicantRiskLabels.crossCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`deviceCheck`](#ApplicantRiskLabels.deviceCheck)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`device`](#ApplicantRiskLabels.device)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`phone`](#ApplicantRiskLabels.phone)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`email`](#ApplicantRiskLabels.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`tags`](#BeneficiaryStatsExpressionData.tags)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`rejectLabels`](#BeneficiaryStatsExpressionData.rejectLabels)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`ownershipStructureDepth`](#CompanyInfoExpressionData.ownershipStructureDepth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`skippedTypes`](#CompanyInfoExpressionData.skippedTypes)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiallyHeld`](#CompanyInfoExpressionData.beneficiallyHeld)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noShareholders`](#CompanyInfoExpressionData.noShareholders)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noUBOs`](#CompanyInfoExpressionData.noUBOs)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`website`](#CompanyInfoExpressionData.website)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`taxId`](#CompanyInfoExpressionData.taxId)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`phone`](#CompanyInfoExpressionData.phone)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`email`](#CompanyInfoExpressionData.email)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporatedOn`](#CompanyInfoExpressionData.incorporatedOn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationLocation`](#CompanyInfoExpressionData.registrationLocation)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`postalAddress`](#CompanyInfoExpressionData.postalAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalAddress`](#CompanyInfoExpressionData.legalAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`leiCode`](#CompanyInfoExpressionData.leiCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationNumber`](#CompanyInfoExpressionData.registrationNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`companyName`](#CompanyInfoExpressionData.companyName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalForm`](#CompanyInfoExpressionData.legalForm)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`type`](#CompanyInfoExpressionData.type)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`country`](#CompanyInfoExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`address`](#ApplicantInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`dob`](#ApplicantInfoExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`age`](#ApplicantInfoExpressionData.age)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`residenceCountry`](#ApplicantInfoExpressionData.residenceCountry)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`taxResidenceCountry`](#ApplicantInfoExpressionData.taxResidenceCountry)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`nationality`](#ApplicantInfoExpressionData.nationality)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`gender`](#ApplicantInfoExpressionData.gender)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`lastNameEn`](#ApplicantInfoExpressionData.lastNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`lastName`](#ApplicantInfoExpressionData.lastName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`middleNameEn`](#ApplicantInfoExpressionData.middleNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`middleName`](#ApplicantInfoExpressionData.middleName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`firstNameEn`](#ApplicantInfoExpressionData.firstNameEn)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`firstName`](#ApplicantInfoExpressionData.firstName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`countryOfBirth`](#ApplicantInfoExpressionData.countryOfBirth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`country`](#ApplicantInfoExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`info`](#ApplicantExpressionData.info).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`countryOfBirth`](#ApplicantExpressionData.countryOfBirth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`country`](#ApplicantExpressionData.country)
- [`applicant`](#WorkflowExpressionContext.applicant).[`fullName`](#ApplicantExpressionData.fullName)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`registrationDate`](#ApplicantExpressionData.registrationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`ageInDays`](#DateExpressionData.ageInDays)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`ageInYears`](#DateExpressionData.ageInYears)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`month`](#DateExpressionData.month)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`year`](#DateExpressionData.year)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`applicant`](#WorkflowExpressionContext.applicant).[`createdAt`](#ApplicantExpressionData.createdAt).[`timestamp`](#DateExpressionData.timestamp)
- [`applicant`](#WorkflowExpressionContext.applicant).[`externalUserId`](#ApplicantExpressionData.externalUserId)
- [`applicant`](#WorkflowExpressionContext.applicant).[`id`](#ApplicantExpressionData.id)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`month`](#DateExpressionData.month)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`year`](#DateExpressionData.year)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi`](#WorkflowExpressionContext.poi).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi`](#WorkflowExpressionContext.poi).[`ocrDocTypes`](#PoiExpressionData.ocrDocTypes)
- [`poi`](#WorkflowExpressionContext.poi).[`violations`](#PoiExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poi`](#WorkflowExpressionContext.poi).[`violations`](#PoiExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poi`](#WorkflowExpressionContext.poi).[`violations`](#PoiExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poi`](#WorkflowExpressionContext.poi).[`gender`](#PoiExpressionData.gender)
- [`poi`](#WorkflowExpressionContext.poi).[`fullMrz`](#PoiExpressionData.fullMrz)
- [`poi`](#WorkflowExpressionContext.poi).[`nfc`](#PoiExpressionData.nfc).[`fullMrz`](#NfcInfoExpressionData.fullMrz)
- [`poi`](#WorkflowExpressionContext.poi).[`category`](#PoiExpressionData.category)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poi`](#WorkflowExpressionContext.poi).[`address`](#PoiExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poi`](#WorkflowExpressionContext.poi).[`metadata`](#PoiExpressionData.metadata)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`month`](#DateExpressionData.month)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`year`](#DateExpressionData.year)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi`](#WorkflowExpressionContext.poi).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi`](#WorkflowExpressionContext.poi).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`seconds`](#TimespanExpressionData.seconds)
- [`poi`](#WorkflowExpressionContext.poi).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`minutes`](#TimespanExpressionData.minutes)
- [`poi`](#WorkflowExpressionContext.poi).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`hours`](#TimespanExpressionData.hours)
- [`poi`](#WorkflowExpressionContext.poi).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`days`](#TimespanExpressionData.days)
- [`poi`](#WorkflowExpressionContext.poi).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`millis`](#TimespanExpressionData.millis)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`month`](#DateExpressionData.month)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`year`](#DateExpressionData.year)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi`](#WorkflowExpressionContext.poi).[`validUntil`](#PoiExpressionData.validUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi`](#WorkflowExpressionContext.poi).[`issueAuthorityCode`](#PoiExpressionData.issueAuthorityCode)
- [`poi`](#WorkflowExpressionContext.poi).[`issueAuthority`](#PoiExpressionData.issueAuthority)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi`](#WorkflowExpressionContext.poi).[`issuedDate`](#PoiExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi`](#WorkflowExpressionContext.poi).[`placeOfBirth`](#PoiExpressionData.placeOfBirth)
- [`poi`](#WorkflowExpressionContext.poi).[`nationality`](#PoiExpressionData.nationality)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi`](#WorkflowExpressionContext.poi).[`dob`](#PoiExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poi`](#WorkflowExpressionContext.poi).[`additionalNumber`](#PoiExpressionData.additionalNumber)
- [`poi`](#WorkflowExpressionContext.poi).[`number`](#PoiExpressionData.number)
- [`poi`](#WorkflowExpressionContext.poi).[`idDocType`](#PoiExpressionData.idDocType)
- [`poi`](#WorkflowExpressionContext.poi).[`country`](#PoiExpressionData.country)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poi`](#WorkflowExpressionContext.poi).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`month`](#DateExpressionData.month)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`year`](#DateExpressionData.year)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi2`](#WorkflowExpressionContext.poi2).[`ocrDocTypes`](#PoiExpressionData.ocrDocTypes)
- [`poi2`](#WorkflowExpressionContext.poi2).[`violations`](#PoiExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poi2`](#WorkflowExpressionContext.poi2).[`violations`](#PoiExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poi2`](#WorkflowExpressionContext.poi2).[`violations`](#PoiExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poi2`](#WorkflowExpressionContext.poi2).[`gender`](#PoiExpressionData.gender)
- [`poi2`](#WorkflowExpressionContext.poi2).[`fullMrz`](#PoiExpressionData.fullMrz)
- [`poi2`](#WorkflowExpressionContext.poi2).[`nfc`](#PoiExpressionData.nfc).[`fullMrz`](#NfcInfoExpressionData.fullMrz)
- [`poi2`](#WorkflowExpressionContext.poi2).[`category`](#PoiExpressionData.category)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poi2`](#WorkflowExpressionContext.poi2).[`address`](#PoiExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poi2`](#WorkflowExpressionContext.poi2).[`metadata`](#PoiExpressionData.metadata)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`month`](#DateExpressionData.month)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`year`](#DateExpressionData.year)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi2`](#WorkflowExpressionContext.poi2).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`seconds`](#TimespanExpressionData.seconds)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`minutes`](#TimespanExpressionData.minutes)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`hours`](#TimespanExpressionData.hours)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`days`](#TimespanExpressionData.days)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`millis`](#TimespanExpressionData.millis)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`month`](#DateExpressionData.month)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`year`](#DateExpressionData.year)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi2`](#WorkflowExpressionContext.poi2).[`validUntil`](#PoiExpressionData.validUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issueAuthorityCode`](#PoiExpressionData.issueAuthorityCode)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issueAuthority`](#PoiExpressionData.issueAuthority)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi2`](#WorkflowExpressionContext.poi2).[`issuedDate`](#PoiExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi2`](#WorkflowExpressionContext.poi2).[`placeOfBirth`](#PoiExpressionData.placeOfBirth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`nationality`](#PoiExpressionData.nationality)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi2`](#WorkflowExpressionContext.poi2).[`dob`](#PoiExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poi2`](#WorkflowExpressionContext.poi2).[`additionalNumber`](#PoiExpressionData.additionalNumber)
- [`poi2`](#WorkflowExpressionContext.poi2).[`number`](#PoiExpressionData.number)
- [`poi2`](#WorkflowExpressionContext.poi2).[`idDocType`](#PoiExpressionData.idDocType)
- [`poi2`](#WorkflowExpressionContext.poi2).[`country`](#PoiExpressionData.country)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poi2`](#WorkflowExpressionContext.poi2).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`month`](#DateExpressionData.month)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`year`](#DateExpressionData.year)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi3`](#WorkflowExpressionContext.poi3).[`ocrDocTypes`](#PoiExpressionData.ocrDocTypes)
- [`poi3`](#WorkflowExpressionContext.poi3).[`violations`](#PoiExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poi3`](#WorkflowExpressionContext.poi3).[`violations`](#PoiExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poi3`](#WorkflowExpressionContext.poi3).[`violations`](#PoiExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poi3`](#WorkflowExpressionContext.poi3).[`gender`](#PoiExpressionData.gender)
- [`poi3`](#WorkflowExpressionContext.poi3).[`fullMrz`](#PoiExpressionData.fullMrz)
- [`poi3`](#WorkflowExpressionContext.poi3).[`nfc`](#PoiExpressionData.nfc).[`fullMrz`](#NfcInfoExpressionData.fullMrz)
- [`poi3`](#WorkflowExpressionContext.poi3).[`category`](#PoiExpressionData.category)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poi3`](#WorkflowExpressionContext.poi3).[`address`](#PoiExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poi3`](#WorkflowExpressionContext.poi3).[`metadata`](#PoiExpressionData.metadata)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`month`](#DateExpressionData.month)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`year`](#DateExpressionData.year)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi3`](#WorkflowExpressionContext.poi3).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`seconds`](#TimespanExpressionData.seconds)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`minutes`](#TimespanExpressionData.minutes)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`hours`](#TimespanExpressionData.hours)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`days`](#TimespanExpressionData.days)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`millis`](#TimespanExpressionData.millis)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`month`](#DateExpressionData.month)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`year`](#DateExpressionData.year)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi3`](#WorkflowExpressionContext.poi3).[`validUntil`](#PoiExpressionData.validUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issueAuthorityCode`](#PoiExpressionData.issueAuthorityCode)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issueAuthority`](#PoiExpressionData.issueAuthority)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi3`](#WorkflowExpressionContext.poi3).[`issuedDate`](#PoiExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi3`](#WorkflowExpressionContext.poi3).[`placeOfBirth`](#PoiExpressionData.placeOfBirth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`nationality`](#PoiExpressionData.nationality)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi3`](#WorkflowExpressionContext.poi3).[`dob`](#PoiExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poi3`](#WorkflowExpressionContext.poi3).[`additionalNumber`](#PoiExpressionData.additionalNumber)
- [`poi3`](#WorkflowExpressionContext.poi3).[`number`](#PoiExpressionData.number)
- [`poi3`](#WorkflowExpressionContext.poi3).[`idDocType`](#PoiExpressionData.idDocType)
- [`poi3`](#WorkflowExpressionContext.poi3).[`country`](#PoiExpressionData.country)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poi3`](#WorkflowExpressionContext.poi3).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`month`](#DateExpressionData.month)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`year`](#DateExpressionData.year)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dlCategoryBValidUntil`](#PoiExpressionData.dlCategoryBValidUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi4`](#WorkflowExpressionContext.poi4).[`ocrDocTypes`](#PoiExpressionData.ocrDocTypes)
- [`poi4`](#WorkflowExpressionContext.poi4).[`violations`](#PoiExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poi4`](#WorkflowExpressionContext.poi4).[`violations`](#PoiExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poi4`](#WorkflowExpressionContext.poi4).[`violations`](#PoiExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poi4`](#WorkflowExpressionContext.poi4).[`gender`](#PoiExpressionData.gender)
- [`poi4`](#WorkflowExpressionContext.poi4).[`fullMrz`](#PoiExpressionData.fullMrz)
- [`poi4`](#WorkflowExpressionContext.poi4).[`nfc`](#PoiExpressionData.nfc).[`fullMrz`](#NfcInfoExpressionData.fullMrz)
- [`poi4`](#WorkflowExpressionContext.poi4).[`category`](#PoiExpressionData.category)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poi4`](#WorkflowExpressionContext.poi4).[`address`](#PoiExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poi4`](#WorkflowExpressionContext.poi4).[`metadata`](#PoiExpressionData.metadata)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`month`](#DateExpressionData.month)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`year`](#DateExpressionData.year)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi4`](#WorkflowExpressionContext.poi4).[`firstIssuedDate`](#PoiExpressionData.firstIssuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`seconds`](#TimespanExpressionData.seconds)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`minutes`](#TimespanExpressionData.minutes)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`hours`](#TimespanExpressionData.hours)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`days`](#TimespanExpressionData.days)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validityPeriod`](#PoiExpressionData.validityPeriod).[`millis`](#TimespanExpressionData.millis)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`month`](#DateExpressionData.month)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`year`](#DateExpressionData.year)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi4`](#WorkflowExpressionContext.poi4).[`validUntil`](#PoiExpressionData.validUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issueAuthorityCode`](#PoiExpressionData.issueAuthorityCode)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issueAuthority`](#PoiExpressionData.issueAuthority)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi4`](#WorkflowExpressionContext.poi4).[`issuedDate`](#PoiExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poi4`](#WorkflowExpressionContext.poi4).[`placeOfBirth`](#PoiExpressionData.placeOfBirth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`nationality`](#PoiExpressionData.nationality)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poi4`](#WorkflowExpressionContext.poi4).[`dob`](#PoiExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poi4`](#WorkflowExpressionContext.poi4).[`additionalNumber`](#PoiExpressionData.additionalNumber)
- [`poi4`](#WorkflowExpressionContext.poi4).[`number`](#PoiExpressionData.number)
- [`poi4`](#WorkflowExpressionContext.poi4).[`idDocType`](#PoiExpressionData.idDocType)
- [`poi4`](#WorkflowExpressionContext.poi4).[`country`](#PoiExpressionData.country)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckParentName2`](#PoiExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckParentName1`](#PoiExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poi4`](#WorkflowExpressionContext.poi4).[`crossCheckNameData`](#PoiExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`poa`](#WorkflowExpressionContext.poa).[`ocrDocTypes`](#PoaExpressionData.ocrDocTypes)
- [`poa`](#WorkflowExpressionContext.poa).[`violations`](#PoaExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poa`](#WorkflowExpressionContext.poa).[`violations`](#PoaExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poa`](#WorkflowExpressionContext.poa).[`violations`](#PoaExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poa`](#WorkflowExpressionContext.poa).[`gender`](#PoaExpressionData.gender)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poa`](#WorkflowExpressionContext.poa).[`dob`](#PoaExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poa`](#WorkflowExpressionContext.poa).[`image`](#PoaExpressionData.image).[`mimeType`](#ImageExpressionData.mimeType).[`ext`](#MediaTypeId.ext)
- [`poa`](#WorkflowExpressionContext.poa).[`image`](#PoaExpressionData.image).[`softwareTag`](#ImageExpressionData.softwareTag)
- [`poa`](#WorkflowExpressionContext.poa).[`detectedLanguages`](#PoaExpressionData.detectedLanguages)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poa`](#WorkflowExpressionContext.poa).[`issuedDate`](#PoaExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poa`](#WorkflowExpressionContext.poa).[`address`](#PoaExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poa`](#WorkflowExpressionContext.poa).[`metadata`](#PoaExpressionData.metadata)
- [`poa`](#WorkflowExpressionContext.poa).[`number`](#PoaExpressionData.number)
- [`poa`](#WorkflowExpressionContext.poa).[`idDocType`](#PoaExpressionData.idDocType)
- [`poa`](#WorkflowExpressionContext.poa).[`country`](#PoaExpressionData.country)
- [`poa`](#WorkflowExpressionContext.poa).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poa`](#WorkflowExpressionContext.poa).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poa`](#WorkflowExpressionContext.poa).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poa`](#WorkflowExpressionContext.poa).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poa`](#WorkflowExpressionContext.poa).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`poa2`](#WorkflowExpressionContext.poa2).[`ocrDocTypes`](#PoaExpressionData.ocrDocTypes)
- [`poa2`](#WorkflowExpressionContext.poa2).[`violations`](#PoaExpressionData.violations).[`barcode`](#DocViolationsExpressionData.barcode)
- [`poa2`](#WorkflowExpressionContext.poa2).[`violations`](#PoaExpressionData.violations).[`dfr`](#DocViolationsExpressionData.dfr)
- [`poa2`](#WorkflowExpressionContext.poa2).[`violations`](#PoaExpressionData.violations).[`mrz`](#DocViolationsExpressionData.mrz)
- [`poa2`](#WorkflowExpressionContext.poa2).[`gender`](#PoaExpressionData.gender)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`month`](#DateExpressionData.month)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`year`](#DateExpressionData.year)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poa2`](#WorkflowExpressionContext.poa2).[`dob`](#PoaExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`poa2`](#WorkflowExpressionContext.poa2).[`image`](#PoaExpressionData.image).[`mimeType`](#ImageExpressionData.mimeType).[`ext`](#MediaTypeId.ext)
- [`poa2`](#WorkflowExpressionContext.poa2).[`image`](#PoaExpressionData.image).[`softwareTag`](#ImageExpressionData.softwareTag)
- [`poa2`](#WorkflowExpressionContext.poa2).[`detectedLanguages`](#PoaExpressionData.detectedLanguages)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`poa2`](#WorkflowExpressionContext.poa2).[`issuedDate`](#PoaExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`street`](#AddressExpressionData.street)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`town`](#AddressExpressionData.town)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`state`](#AddressExpressionData.state)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`poa2`](#WorkflowExpressionContext.poa2).[`address`](#PoaExpressionData.address).[`country`](#AddressExpressionData.country)
- [`poa2`](#WorkflowExpressionContext.poa2).[`metadata`](#PoaExpressionData.metadata)
- [`poa2`](#WorkflowExpressionContext.poa2).[`number`](#PoaExpressionData.number)
- [`poa2`](#WorkflowExpressionContext.poa2).[`idDocType`](#PoaExpressionData.idDocType)
- [`poa2`](#WorkflowExpressionContext.poa2).[`country`](#PoaExpressionData.country)
- [`poa2`](#WorkflowExpressionContext.poa2).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`poa2`](#WorkflowExpressionContext.poa2).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`poa2`](#WorkflowExpressionContext.poa2).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`poa2`](#WorkflowExpressionContext.poa2).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`poa2`](#WorkflowExpressionContext.poa2).[`crossCheckNameData`](#PoaExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`browserFullVersion`](#DeviceInfoExpressionData.browserFullVersion)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`browser`](#DeviceInfoExpressionData.browser)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`platformVersion`](#DeviceInfoExpressionData.platformVersion)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`platform`](#DeviceInfoExpressionData.platform)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`type`](#DeviceInfoExpressionData.type)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`model`](#DeviceInfoExpressionData.model)
- [`device`](#WorkflowExpressionContext.device).[`info`](#DeviceExpressionData.info).[`make`](#DeviceInfoExpressionData.make)
- [`device`](#WorkflowExpressionContext.device).[`ipStateCode`](#DeviceExpressionData.ipStateCode)
- [`device`](#WorkflowExpressionContext.device).[`ipCountry`](#DeviceExpressionData.ipCountry)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days7`](#DeviceStatsExpressionData.days7).[`deviceIds`](#DevicePeriodStatsExpressionData.deviceIds)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days7`](#DeviceStatsExpressionData.days7).[`riskLabels`](#DevicePeriodStatsExpressionData.riskLabels)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days7`](#DeviceStatsExpressionData.days7).[`sameDeviceApplicantCount`](#DevicePeriodStatsExpressionData.sameDeviceApplicantCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days7`](#DeviceStatsExpressionData.days7).[`deviceCount`](#DevicePeriodStatsExpressionData.deviceCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days1`](#DeviceStatsExpressionData.days1).[`deviceIds`](#DevicePeriodStatsExpressionData.deviceIds)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days1`](#DeviceStatsExpressionData.days1).[`riskLabels`](#DevicePeriodStatsExpressionData.riskLabels)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days1`](#DeviceStatsExpressionData.days1).[`sameDeviceApplicantCount`](#DevicePeriodStatsExpressionData.sameDeviceApplicantCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`days1`](#DeviceStatsExpressionData.days1).[`deviceCount`](#DevicePeriodStatsExpressionData.deviceCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`hours1`](#DeviceStatsExpressionData.hours1).[`deviceIds`](#DevicePeriodStatsExpressionData.deviceIds)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`hours1`](#DeviceStatsExpressionData.hours1).[`riskLabels`](#DevicePeriodStatsExpressionData.riskLabels)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`hours1`](#DeviceStatsExpressionData.hours1).[`sameDeviceApplicantCount`](#DevicePeriodStatsExpressionData.sameDeviceApplicantCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`hours1`](#DeviceStatsExpressionData.hours1).[`deviceCount`](#DevicePeriodStatsExpressionData.deviceCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`minutes5`](#DeviceStatsExpressionData.minutes5).[`deviceIds`](#DevicePeriodStatsExpressionData.deviceIds)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`minutes5`](#DeviceStatsExpressionData.minutes5).[`riskLabels`](#DevicePeriodStatsExpressionData.riskLabels)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`minutes5`](#DeviceStatsExpressionData.minutes5).[`sameDeviceApplicantCount`](#DevicePeriodStatsExpressionData.sameDeviceApplicantCount)
- [`deviceStats`](#WorkflowExpressionContext.deviceStats).[`minutes5`](#DeviceStatsExpressionData.minutes5).[`deviceCount`](#DevicePeriodStatsExpressionData.deviceCount)
- [`questionnaires`](#WorkflowExpressionContext.questionnaires)
- [`clientLists`](#WorkflowExpressionContext.clientLists)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`personalizationSystemSerialNumber`](#NfcExtractedDataVerificationDataExpressionData.personalizationSystemSerialNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`dateAndTimeOfPersonalization`](#NfcExtractedDataVerificationDataExpressionData.dateAndTimeOfPersonalization)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`taxOrExitRequirements`](#NfcExtractedDataVerificationDataExpressionData.taxOrExitRequirements)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`endorsementsAndObservations`](#NfcExtractedDataVerificationDataExpressionData.endorsementsAndObservations)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`namesOfOtherPersons`](#NfcExtractedDataVerificationDataExpressionData.namesOfOtherPersons)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`dateOfIssue`](#NfcExtractedDataVerificationDataExpressionData.dateOfIssue)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`verificationData`](#NfcExtractedDataExpressionData.verificationData).[`issuingAuthority`](#NfcExtractedDataVerificationDataExpressionData.issuingAuthority)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`custodyInformation`](#NfcExtractedDataDocumentInfoExpressionData.custodyInformation)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`otherValidTDNumbers`](#NfcExtractedDataDocumentInfoExpressionData.otherValidTDNumbers)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`personalSummary`](#NfcExtractedDataDocumentInfoExpressionData.personalSummary)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`title`](#NfcExtractedDataDocumentInfoExpressionData.title)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`profession`](#NfcExtractedDataDocumentInfoExpressionData.profession)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`telephone`](#NfcExtractedDataDocumentInfoExpressionData.telephone)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`permanentAddress`](#NfcExtractedDataDocumentInfoExpressionData.permanentAddress)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`placeOfBirth`](#NfcExtractedDataDocumentInfoExpressionData.placeOfBirth)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`fullDateOfBirth`](#NfcExtractedDataDocumentInfoExpressionData.fullDateOfBirth)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`personalNumber`](#NfcExtractedDataDocumentInfoExpressionData.personalNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`otherNames`](#NfcExtractedDataDocumentInfoExpressionData.otherNames)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`documentInfo`](#NfcExtractedDataExpressionData.documentInfo).[`nameOfHolder`](#NfcExtractedDataDocumentInfoExpressionData.nameOfHolder)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`gender`](#NfcExtractedDataMrzInfoExpressionData.gender)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dob`](#NfcExtractedDataMrzInfoExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`identifier`](#NfcExtractedDataMrzInfoExpressionData.identifier)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`nationality`](#NfcExtractedDataMrzInfoExpressionData.nationality)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`issuingState`](#NfcExtractedDataMrzInfoExpressionData.issuingState)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`documentNumber`](#NfcExtractedDataMrzInfoExpressionData.documentNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`dateOfExpiration`](#NfcExtractedDataMrzInfoExpressionData.dateOfExpiration).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`extractedData`](#NfcCheckExpressionData.extractedData).[`mrzInfo`](#NfcExtractedDataExpressionData.mrzInfo).[`fullMrz`](#NfcExtractedDataMrzInfoExpressionData.fullMrz)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`validation`](#NfcCheckExpressionData.validation).[`imageCheckPassed`](#NfcValidationExpressionData.imageCheckPassed)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`validation`](#NfcCheckExpressionData.validation).[`mrzCheckPassed`](#NfcValidationExpressionData.mrzCheckPassed)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`validation`](#NfcCheckExpressionData.validation).[`certificateMasterListCheckPassed`](#NfcValidationExpressionData.certificateMasterListCheckPassed)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`validation`](#NfcCheckExpressionData.validation).[`certificateSelfCheckPassed`](#NfcValidationExpressionData.certificateSelfCheckPassed)
- [`checks`](#WorkflowExpressionContext.checks).[`nfcCheck`](#BackgroundChecksExpressionData.nfcCheck).[`validation`](#NfcCheckExpressionData.validation).[`activeAuthenticationPassed`](#NfcValidationExpressionData.activeAuthenticationPassed)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`commercial`](#BinInfoExpressionData.commercial)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`virtual`](#BinInfoExpressionData.virtual)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`prepaid`](#BinInfoExpressionData.prepaid)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`type`](#BinInfoExpressionData.type)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`brand`](#BinInfoExpressionData.brand)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`issuer`](#BinInfoExpressionData.issuer)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`country`](#BinInfoExpressionData.country)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`institutionName`](#PaymentSourceInfoExpressionData.institutionName)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`accountIdentifier`](#PaymentSourceInfoExpressionData.accountIdentifier)
- [`checks`](#WorkflowExpressionContext.checks).[`paymentSource`](#BackgroundChecksExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`type`](#PaymentSourceInfoExpressionData.type)
- [`checks`](#WorkflowExpressionContext.checks).[`ip`](#BackgroundChecksExpressionData.ip).[`country`](#IpCheckExpressionData.country)
- [`checks`](#WorkflowExpressionContext.checks).[`companyWatchlist`](#BackgroundChecksExpressionData.companyWatchlist).[`tags`](#CompanyWatchlistCheckExpressionData.tags)
- [`checks`](#WorkflowExpressionContext.checks).[`companyWatchlist`](#BackgroundChecksExpressionData.companyWatchlist).[`matchStatuses`](#CompanyWatchlistCheckExpressionData.matchStatuses)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`tags`](#PersonWatchlistCheckExpressionData.tags)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingUpdatedAt`](#PersonWatchlistCheckExpressionData.ongoingUpdatedAt).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`ongoingMatchStatuses`](#PersonWatchlistCheckExpressionData.ongoingMatchStatuses)
- [`checks`](#WorkflowExpressionContext.checks).[`personWatchlist`](#BackgroundChecksExpressionData.personWatchlist).[`matchStatuses`](#PersonWatchlistCheckExpressionData.matchStatuses)
- [`checks`](#WorkflowExpressionContext.checks).[`customDataSources["..."]`](#BackgroundChecksExpressionData.customDataSources).[`output`](#CustomDataSourceExpressionData.output)
- [`checks`](#WorkflowExpressionContext.checks).[`customDataSources["..."]`](#BackgroundChecksExpressionData.customDataSources).[`success`](#CustomDataSourceExpressionData.success)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`validUntil`](#CompanyLicenseInfoExpressionData.validUntil).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`licenseInfo`](#CompanyCheckInfoExpressionData.licenseInfo).[`issuedDate`](#CompanyLicenseInfoExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`legalForm`](#CompanyCheckInfoExpressionData.legalForm)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`startDate`](#CompanyCheckInfoExpressionData.startDate).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`incorporatedOn`](#CompanyCheckInfoExpressionData.incorporatedOn).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`industryCode`](#CompanyCheckInfoExpressionData.industryCode).[`descriptions`](#IndustryCodeExpressionData.descriptions)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`industryCode`](#CompanyCheckInfoExpressionData.industryCode).[`codes`](#IndustryCodeExpressionData.codes)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`employeesNumber`](#CompanyCheckInfoExpressionData.employeesNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`registeredCapitalAmount`](#CompanyCheckInfoExpressionData.registeredCapitalAmount)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`type`](#CompanyCheckInfoExpressionData.type)
- [`checks`](#WorkflowExpressionContext.checks).[`company`](#BackgroundChecksExpressionData.company).[`info`](#CompanyCheckExpressionData.info).[`status`](#CompanyCheckInfoExpressionData.status)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`violations`](#EkycCheckExpressionData.violations)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`number`](#BgCheckExtractedExpressionData.number)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`additionalFields`](#BgCheckExtractedExpressionData.additionalFields).[`phone`](#AdditionalFieldsExpressionData.phone).[`country`](#PhoneExpressionData.country)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`additionalFields`](#BgCheckExtractedExpressionData.additionalFields).[`phone`](#AdditionalFieldsExpressionData.phone).[`number`](#PhoneExpressionData.number)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`street`](#AddressExpressionData.street)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`town`](#AddressExpressionData.town)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`state`](#AddressExpressionData.state)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`address`](#BgCheckExtractedExpressionData.address).[`country`](#AddressExpressionData.country)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`gender`](#BgCheckExtractedExpressionData.gender)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`month`](#DateExpressionData.month)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`year`](#DateExpressionData.year)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`dob`](#BgCheckExtractedExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`crossCheckNameData`](#BgCheckExtractedExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`crossCheckNameData`](#BgCheckExtractedExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`crossCheckNameData`](#BgCheckExtractedExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`crossCheckNameData`](#BgCheckExtractedExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`checks`](#WorkflowExpressionContext.checks).[`ekyc`](#BackgroundChecksExpressionData.ekyc).[`extractedData`](#EkycCheckExpressionData.extractedData).[`crossCheckNameData`](#BgCheckExtractedExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`checks`](#WorkflowExpressionContext.checks).[`poa2`](#BackgroundChecksExpressionData.poa2).[`unconventionalProvider`](#PoaCheckExpressionData.unconventionalProvider)
- [`checks`](#WorkflowExpressionContext.checks).[`poa2`](#BackgroundChecksExpressionData.poa2).[`companyType`](#PoaCheckExpressionData.companyType).[`possibleSubTypes`](#PoaCompanyContactType.possibleSubTypes)
- [`checks`](#WorkflowExpressionContext.checks).[`poa`](#BackgroundChecksExpressionData.poa).[`unconventionalProvider`](#PoaCheckExpressionData.unconventionalProvider)
- [`checks`](#WorkflowExpressionContext.checks).[`poa`](#BackgroundChecksExpressionData.poa).[`companyType`](#PoaCheckExpressionData.companyType).[`possibleSubTypes`](#PoaCompanyContactType.possibleSubTypes)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`riskLevels`](#AllIpChecksExpressionData.riskLevels)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`tors`](#AllIpChecksExpressionData.tors)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`vpns`](#AllIpChecksExpressionData.vpns)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`countries`](#AllIpChecksExpressionData.countries)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`connectionTypes`](#AllIpChecksExpressionData.connectionTypes)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`orgs`](#AllIpChecksExpressionData.orgs)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`asnOrgs`](#AllIpChecksExpressionData.asnOrgs)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`stateCodes`](#AllIpChecksExpressionData.stateCodes)
- [`checks`](#WorkflowExpressionContext.checks).[`all`](#BackgroundChecksExpressionData.all).[`ip`](#AllBackgroundChecksExpressionData.ip).[`ips`](#AllIpChecksExpressionData.ips)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`commercial`](#BinInfoExpressionData.commercial)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`virtual`](#BinInfoExpressionData.virtual)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`prepaid`](#BinInfoExpressionData.prepaid)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`type`](#BinInfoExpressionData.type)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`brand`](#BinInfoExpressionData.brand)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`issuer`](#BinInfoExpressionData.issuer)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`riskCheck`](#PaymentSourceCheckInfoExpressionData.riskCheck).[`binInfo`](#PaymentSourceRiskCheckExpressionData.binInfo).[`country`](#BinInfoExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`institutionName`](#PaymentSourceInfoExpressionData.institutionName)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`accountIdentifier`](#PaymentSourceInfoExpressionData.accountIdentifier)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`paymentSource`](#BackgroundChecksActionExpressionData.paymentSource).[`extractedInfo`](#PaymentSourceCheckInfoExpressionData.extractedInfo).[`type`](#PaymentSourceInfoExpressionData.type)
- [`action`](#WorkflowExpressionContext.action).[`checks`](#ApplicantActionExpressionData.checks).[`crossValidation`](#BackgroundChecksActionExpressionData.crossValidation).[`violations`](#CrossValidationCheckExpressionData.violations)
- [`action`](#WorkflowExpressionContext.action).[`questionnaires`](#ApplicantActionExpressionData.questionnaires)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`phone`](#ApplicantInfoExpressionData.phone).[`country`](#PhoneExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`phone`](#ApplicantInfoExpressionData.phone).[`number`](#PhoneExpressionData.number)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`tin`](#ApplicantInfoExpressionData.tin)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`tinCountries`](#ApplicantInfoExpressionData.tinCountries)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`expirationDate`](#UpcomingDocumentExpirationExpressionData.expirationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocSubType`](#UpcomingDocumentExpirationExpressionData.idDocSubType)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`upcomingDocumentExpiration`](#CompanyInfoExpressionData.upcomingDocumentExpiration).[`idDocType`](#UpcomingDocumentExpirationExpressionData.idDocType)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustProtectors`](#BeneficiaryCountsExpressionData.trustProtectors)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustSettlors`](#BeneficiaryCountsExpressionData.trustSettlors)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trustBeneficiaries`](#BeneficiaryCountsExpressionData.trustBeneficiaries)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`trusties`](#BeneficiaryCountsExpressionData.trusties)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`authorizedSignatories`](#BeneficiaryCountsExpressionData.authorizedSignatories)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`legalAdvisors`](#BeneficiaryCountsExpressionData.legalAdvisors)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`founders`](#BeneficiaryCountsExpressionData.founders)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`secretaries`](#BeneficiaryCountsExpressionData.secretaries)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`investors`](#BeneficiaryCountsExpressionData.investors)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`companyOfficers`](#BeneficiaryCountsExpressionData.companyOfficers)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`directors`](#BeneficiaryCountsExpressionData.directors)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`representatives`](#BeneficiaryCountsExpressionData.representatives)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`shareholders`](#BeneficiaryCountsExpressionData.shareholders)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`counts`](#BeneficiaryStatsExpressionData.counts).[`ubos`](#BeneficiaryCountsExpressionData.ubos)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`company`](#ApplicantRiskLabels.company)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`person`](#ApplicantRiskLabels.person)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`aml`](#ApplicantRiskLabels.aml)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`selfie`](#ApplicantRiskLabels.selfie)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`crossCheck`](#ApplicantRiskLabels.crossCheck)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`deviceCheck`](#ApplicantRiskLabels.deviceCheck)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`device`](#ApplicantRiskLabels.device)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`phone`](#ApplicantRiskLabels.phone)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`riskLabels`](#BeneficiaryStatsExpressionData.riskLabels).[`email`](#ApplicantRiskLabels.email)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`tags`](#BeneficiaryStatsExpressionData.tags)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiaryStats`](#CompanyInfoExpressionData.beneficiaryStats).[`rejectLabels`](#BeneficiaryStatsExpressionData.rejectLabels)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`ownershipStructureDepth`](#CompanyInfoExpressionData.ownershipStructureDepth)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`skippedTypes`](#CompanyInfoExpressionData.skippedTypes)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`beneficiallyHeld`](#CompanyInfoExpressionData.beneficiallyHeld)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noShareholders`](#CompanyInfoExpressionData.noShareholders)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`noUBOs`](#CompanyInfoExpressionData.noUBOs)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`website`](#CompanyInfoExpressionData.website)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`taxId`](#CompanyInfoExpressionData.taxId)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`phone`](#CompanyInfoExpressionData.phone)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`email`](#CompanyInfoExpressionData.email)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporationDate`](#CompanyInfoExpressionData.incorporationDate).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`incorporatedOn`](#CompanyInfoExpressionData.incorporatedOn)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationLocation`](#CompanyInfoExpressionData.registrationLocation)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`postalAddress`](#CompanyInfoExpressionData.postalAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalAddress`](#CompanyInfoExpressionData.legalAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`address`](#CompanyInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`leiCode`](#CompanyInfoExpressionData.leiCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`registrationNumber`](#CompanyInfoExpressionData.registrationNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`companyName`](#CompanyInfoExpressionData.companyName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`legalForm`](#CompanyInfoExpressionData.legalForm)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`type`](#CompanyInfoExpressionData.type)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`companyInfo`](#ApplicantInfoExpressionData.companyInfo).[`country`](#CompanyInfoExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfIdentity`](#ApplicantInfoAddressesExpressionData.proofOfIdentity).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`proofOfAddress`](#ApplicantInfoAddressesExpressionData.proofOfAddress).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`externalDb`](#ApplicantInfoAddressesExpressionData.externalDb).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`gps`](#ApplicantInfoAddressesExpressionData.gps).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`autoComplete`](#ApplicantInfoAddressesExpressionData.autoComplete).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`addresses`](#ApplicantInfoExpressionData.addresses).[`manual`](#ApplicantInfoAddressesExpressionData.manual).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`flatNumber`](#AddressExpressionData.flatNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`buildingNumber`](#AddressExpressionData.buildingNumber)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`buildingName`](#AddressExpressionData.buildingName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`postCode`](#AddressExpressionData.postCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`subStreet`](#AddressExpressionData.subStreet)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`street`](#AddressExpressionData.street)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`town`](#AddressExpressionData.town)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`stateCode`](#AddressExpressionData.stateCode)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`state`](#AddressExpressionData.state)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`formattedAddress`](#AddressExpressionData.formattedAddress)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`address`](#ApplicantInfoExpressionData.address).[`country`](#AddressExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`dob`](#ApplicantInfoExpressionData.dob).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`age`](#ApplicantInfoExpressionData.age)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`residenceCountry`](#ApplicantInfoExpressionData.residenceCountry)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`taxResidenceCountry`](#ApplicantInfoExpressionData.taxResidenceCountry)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`nationality`](#ApplicantInfoExpressionData.nationality)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`gender`](#ApplicantInfoExpressionData.gender)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`lastNameEn`](#ApplicantInfoExpressionData.lastNameEn)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`lastName`](#ApplicantInfoExpressionData.lastName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`middleNameEn`](#ApplicantInfoExpressionData.middleNameEn)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`middleName`](#ApplicantInfoExpressionData.middleName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`firstNameEn`](#ApplicantInfoExpressionData.firstNameEn)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`firstName`](#ApplicantInfoExpressionData.firstName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`countryOfBirth`](#ApplicantInfoExpressionData.countryOfBirth)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`country`](#ApplicantInfoExpressionData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`fullName`](#CrossCheckFullNameData.fullName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckParentName2`](#ApplicantInfoExpressionData.crossCheckParentName2).[`country`](#CrossCheckFullNameData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`fullName`](#CrossCheckFullNameData.fullName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckParentName1`](#ApplicantInfoExpressionData.crossCheckParentName1).[`country`](#CrossCheckFullNameData.country)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`aliasName`](#CrossCheckNameData.aliasName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`lastName`](#CrossCheckNameData.lastName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`middleName`](#CrossCheckNameData.middleName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`firstName`](#CrossCheckNameData.firstName)
- [`action`](#WorkflowExpressionContext.action).[`actionFixedInfo`](#ApplicantActionExpressionData.actionFixedInfo).[`crossCheckNameData`](#ApplicantInfoExpressionData.crossCheckNameData).[`country`](#CrossCheckNameData.country)
- [`action`](#WorkflowExpressionContext.action).[`metadata`](#ApplicantActionExpressionData.metadata)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`institutionName`](#PaymentSourceInfoExpressionData.institutionName)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`accountIdentifier`](#PaymentSourceInfoExpressionData.accountIdentifier)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`info`](#PaymentSourceExpressionData.info).[`type`](#PaymentSourceInfoExpressionData.type)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`issuedDate`](#PaymentSourceInfoExpressionData.issuedDate).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`institutionName`](#PaymentSourceInfoExpressionData.institutionName)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`accountIdentifier`](#PaymentSourceInfoExpressionData.accountIdentifier)
- [`action`](#WorkflowExpressionContext.action).[`paymentSource`](#ApplicantActionExpressionData.paymentSource).[`fixedInfo`](#PaymentSourceExpressionData.fixedInfo).[`type`](#PaymentSourceInfoExpressionData.type)
- [`action`](#WorkflowExpressionContext.action).[`review`](#ApplicantActionExpressionData.review).[`buttonIds`](#InspectionReviewExpressionData.buttonIds)
- [`action`](#WorkflowExpressionContext.action).[`review`](#ApplicantActionExpressionData.review).[`rejectLabels`](#InspectionReviewExpressionData.rejectLabels)
- [`action`](#WorkflowExpressionContext.action).[`review`](#ApplicantActionExpressionData.review).[`attemptCnt`](#InspectionReviewExpressionData.attemptCnt)
- [`action`](#WorkflowExpressionContext.action).[`review`](#ApplicantActionExpressionData.review).[`levelName`](#InspectionReviewExpressionData.levelName)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`ageInDays`](#DateExpressionData.ageInDays)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`ageInYears`](#DateExpressionData.ageInYears)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`dayOfMonth`](#DateExpressionData.dayOfMonth)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`month`](#DateExpressionData.month)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`year`](#DateExpressionData.year)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`yyyymmdd`](#DateExpressionData.yyyymmdd)
- [`action`](#WorkflowExpressionContext.action).[`createdAt`](#ApplicantActionExpressionData.createdAt).[`timestamp`](#DateExpressionData.timestamp)
- [`action`](#WorkflowExpressionContext.action).[`externalActionId`](#ApplicantActionExpressionData.externalActionId)
- [`action`](#WorkflowExpressionContext.action).[`id`](#ApplicantActionExpressionData.id)
- [`random`](#WorkflowExpressionContext.random)
references/workflow-notices.md
# Workflow validation notices
*(reference — the meaning of each validation notice the API can return. Keys are authoritative
as the API returns them in `notices[].message`; the meanings here are curated to match. The API
is the source of truth — if a notice comes back that isn't listed here, treat its own message as
canonical.)*
`workflow_api.py validate` (and `post`) returns a `notices[]` array. Each notice carries a
`message` (a key in the table below), a `severity`, the offending `nodeId`/`edgeId`, and a
`params` map filling in the specifics — so the notice itself tells you *what*, *where*, and *how
serious*; this table tells you only what the key **means**. **Severity is a property of the
returned notice, not of the message key** (the same key can come back at a different severity),
so read it off the notice — the catalog isn't organized by it.
What a notice's severity means for you:
- **`error`** blocks publish (the API refuses a revision carrying any error notice), so a draft
with open errors is **unfinished**. An error is one of two kinds: a **missing reference** — a
level / tag / source-key / expression path / transition target that doesn't exist — which you
*ground* (reuse, create, or mark pending; never repoint just to go green); or a **structural**
problem in the graph, which you fix in the spec (most of these the builder rejects before
validate even runs). The description tells you which.
- **`warning`** never blocks, but usually marks a real bug — most often a condition reading data
no preceding level produces (a placement issue; see *Place each gate at the earliest point* in
[workflow-patterns.md](workflow-patterns.md)). Read it; don't paper over it.
- **`info`** is advisory.
## Catalog
| key | meaning |
|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `actionLevelsInActionWorkflowsOnly` | An action level is used inside a default (non-action) workflow, where action levels are not allowed. |
| `actionLevelStartRequired` | An action level has incoming edges but no action-level predecessor, so the workflow does not begin with an action level node as required. |
| `approachingActionLimit` | The number of actions on a single node is nearing the per-node maximum. |
| `approachingCriteriaPerEdgeLimit` | The number of condition criteria on a single edge is nearing the per-edge maximum. |
| `approachingEdgeLimit` | The total number of edges in the workflow is nearing the maximum allowed. |
| `approachingNodeLimit` | The total number of nodes in the workflow is nearing the maximum allowed. |
| `approachingReviewButtonIdsLimit` | The number of rejection tags on a final-rejection node is nearing the maximum allowed. |
| `approachingReviewRejectLabelsLimit` | The number of rejection labels on a final-rejection node is nearing the maximum allowed. |
| `approachingTagsLimit` | The number of tags added by a single tags action is nearing the maximum allowed. |
| `approachingTagsToRemoveLimit` | The number of tags removed by a single tags action is nearing the maximum allowed. |
| `approachingTotalActionsLimit` | The total number of actions across all nodes is nearing the maximum allowed for the workflow. |
| `approachingTotalCriteriaLimit` | The total number of condition criteria across all edges is nearing the maximum allowed for the workflow. |
| `approachingTotalTagsLimit` | The total number of tag entries (added and removed) across the workflow is nearing the maximum allowed. |
| `argumentNotFoundInContext` | A function argument references an expression that is not available in the evaluation context. |
| `argumentTypeMismatch` | A function argument resolves to a type that does not match the function's expected parameter type. |
| `blueprintRequired` | A KYT case-creation action's node has no valid associated blueprint. |
| `clientListsBothSidesNotSupported` | A list condition compares two client-list expressions against each other, which is not supported. |
| `conditionalNodeNoConditions` | A branching (exclusive-choice) node has no outgoing edge carrying a condition or review decision, so it cannot branch. |
| `conditionValueAsExpression` | A criterion's literal value looks like a field path, which usually means a Field selector was intended where a plain Value was entered. |
| `consecutiveActionNodes` | An action node's only incoming edge originates from another action node, producing two action nodes back to back. |
| `defaultEdgeMustBeLast` | On a branching (exclusive-choice) node, the default "else" edge — the one with no conditions and no review decisions — is not the last outgoing edge. |
| `deviceCheckWarning` | An expression reads device-intelligence data, but none of the previous levels runs a device check, so that data is never populated for this expression. |
| `disallowedNodeSequence` | A node's type is not permitted to follow the type of the node that precedes it. |
| `duplicateLevel` | The same level is referenced by more than one node within a single workflow. |
| `edgeTargetRequired` | A graph edge points to no target node, leaving that branch of the flow disconnected. |
| `emptyFieldNoActionLevel` | An action field is referenced although no action level precedes this step, so the field will always be empty at evaluation time. |
| `expressionCountryListRecommendation` | A country-field condition enumerates a large number of countries inline; using a client list with alpha-3 country codes is recommended for maintainability. |
| `expressionEmptyList` | An in / not-in condition is checked against an empty list literal, so it can never match anything. |
| `fieldPredefinedValuesWarning` | A criterion compares a vocabulary-backed field against literal values that are not part of that field's predefined vocabulary, so the comparison is unlikely to ever match. |
| `functionArgumentCountMismatch` | A function call supplies a different number of arguments than the function definition requires. |
| `functionArgumentsEmpty` | A function-call criterion was supplied with no arguments at all. |
| `functionNotFound` | A function-call criterion references a function name that is not defined in the workflow's function set. |
| `idDocWarning` | An expression reads data from a specific ID-document set type (such as a questionnaire or a face check), but no preceding node in the flow collects that document type, so the field will be empty when the condition is evaluated. |
| `inEdgeRequired` | A node has no incoming edge and is therefore unreachable in the flow. |
| `invalidExpression` | A criterion uses an expression that is not present in the available data model — typically an unknown or misspelled field path. |
| `invalidLevelTypeChange` | A transition connects levels with incompatible applicant types, for example moving from a KYC level to a KYB level. |
| `invalidSourceKey` | A source-key action references a source key value that does not exist. |
| `kybConversionError` | A KYB 2.0 (WebSDK-next) company level transitions to an old-structure KYB level; the two generations cannot be mixed in one flow. |
| `labelsOrRejectionTagsRequired` | A final-rejection node defines neither rejection labels nor rejection tags, so it has no rejection outcome to apply. |
| `levelApplicantTypeMismatch` | In an action workflow, the target level in the standard workflow has a different applicant type than the source level. |
| `levelFailedInSandbox` | A level node references a production-only level, which will fail when the workflow runs in a sandbox environment. |
| `levelNameEmpty` | An applicant-level node has no level name assigned. |
| `levelNotFound` | A level node references a level that does not exist among the configured levels. |
| `levelReadOnly` | A level node references an inactive, read-only level, which may not be allowed depending on the client's read-only-level limitations. |
| `levelTypeMismatch` | A level node references a level whose type is neither standalone nor actions, and so cannot be used inside a workflow. |
| `missingLevelsForTransition` | An action workflow references levels for its transitions that do not exist in the default (standard) workflow it transitions to. |
| `multipleOutEdgesNotSupported` | A node type that permits only a single outgoing edge has more than one. |
| `nodeHasNoActions` | An action node carries an empty action list and therefore performs no action. |
| `nodeLevelMissingInStandard` | An action transition targets a level that is absent from the standard workflow. |
| `nodeTypeNoConditions` | A node type that does not support conditions has an outgoing edge that carries one. |
| `notesApplicantActionTargetInActionWorkflowsOnly` | A notes action with an applicant-action target is used in a default (non-action) workflow. |
| `outEdgeRequired` | A branching (exclusive-choice) node has no outgoing edges. |
| `questionnaireMissing` | An action-questionnaire expression references a questionnaire that none of the preceding levels collects, so the referenced answers will never be present. |
| `standardLevelsInStandardWorkflowsOnly` | A standalone applicant level is used inside an action workflow, where only action levels are allowed. |
| `standardWorkflowDoesNotExist` | An action transition references a level, but no published standard workflow exists to validate the transition against. |
| `syntaxError` | A condition failed to compile; the underlying compiler error message is included in the notice. |
| `tagDoesNotExist` | A tags action references a tag that does not exist. |
| `tagListEmpty` | A tags action defines neither tags to add nor tags to remove. |
| `tagsApplicantActionTargetInActionWorkflowsOnly` | A tags action with an applicant-action target is used in a default (non-action) workflow. |
| `terminalNodeOutEdgesNotAllowed` | A terminal node (such as an applicant transition) has outgoing edges, which terminal nodes do not allow. |
| `unknownRejectionTag` | A final-rejection node references a review button (rejection tag) that does not exist. |
| `unsupportedProperty` | A deprecated property is used in an expression; a supported replacement property is suggested in its place. |
references/workflow-patterns.md
# Composition patterns — how to decompose a verification policy
The schema (in [workflow-schema.md](workflow-schema.md)) tells you what's *legal*. This
file is about what's *idiomatic*: how to turn "build me a KYC/KYB workflow" into a graph,
based on recurring shapes in real production workflows. It is **strategy, not schema** —
node-graph structure first, expression paths only as illustration. Don't treat the paths
here as an authoritative vocabulary; reach for the discovery API / [workflow-expressions.md](workflow-expressions.md)
for that.
These idioms shape what the user left **unspecified**. They never license dropping, merging,
or renaming a level or node the user explicitly named — if an idiom seems to conflict with an
explicit input, the input wins; surface the tension, don't resolve it silently.
## Start at the macro shape: a workflow is a forest of *segment pipelines*
A large workflow is the cross-product **{segment} × {policy}**, where a segment is
`{region} × {applicant type / entity class}` — e.g. *US-individual*, *CA-regulated-KYB*,
*LT-tech-provider-KYB*. Each cell is a near-identical **pipeline**, and the pipelines are
**replicated, not shared** — same spine, segment-specific client lists. A consolidated
real workflow is ~20 copies of one spine, each its own disconnected component (a root
level with no incoming edge). See the forest / fixed-applicant-type constraint in
[workflow-schema.md](workflow-schema.md#constraints-product-semantics).
So the first decomposition question is never "what nodes" — it's:
1. **What are my segments?** (regions × applicant types / entity classes)
2. **What is the one pipeline I'll stamp per segment?**
3. **What differs per segment?** (usually just which named client lists / levels it points at)
## The canonical pipeline spine
A KYC flow is a linear spine with branch-offs, in this order (cheapest/most-decisive
gates first):
1. **Entry level** — collect + verify identity (`applicantLevel`).
2. **Eligibility gate** — geo / prohibited-country → *hard stop*. First, because it's the
cheapest decisive check.
3. **Screening gate** — PEP / sanctions / adverse-media → manual review.
4. **Data-quality gates** — missing DoB, declared-vs-document mismatch, bad email domain →
remediation level or reject.
5. **Risk scoring** — questionnaire score → tier → tag (and optionally an EDD level upgrade).
6. **Conditional EDD** — age / score / geo → route into a heavier level.
7. **Terminal** — implicit approve, manual review, or final reject.
**KYB** is the same spine with two swaps: step 1 becomes *entity classification* (tag
Regulated / Non-regulated / Tech-provider, then run a class-specific score ladder), and it
adds a *"not found in external DB"* gate. Everything else mirrors KYC.
## Chaining levels is cheap: transitions capture only the diff
A flow with several sequential `applicantLevel`s does **not** make the applicant re-submit
anything. When an applicant moves from level A to level B, Sumsub captures only the **diff** —
what B requires that A hasn't already satisfied. This is core level-transition behaviour (it
fires whenever a level changes — workflow, API, or operator — it is **not** a workflow feature):
- Already collected and approved on A, also needed by B → **reused automatically**, no applicant
involvement.
- Same item, but B's verification settings differ → **re-verified** under B's settings (process
only, no re-capture).
- A's capture method can't satisfy B's → the applicant **re-captures**, but only that item.
Applies to all level settings, not just ID documents. So **never merge or drop a level to avoid
"double capture"** — sequential levels are not redundant.
**The flip side: an escalation / EDD target must be a *superset*.** Because the transition reuses
everything already collected and approved, a level that requires *less* than the applicant already
has adds nothing — the diff is trivial and they breeze through. An "EDD" or "enhanced" level that
only adds a questionnaire, with **no** new document/verification requirements, actually **lowers**
the bar: the applicant fills a form and is approved on reused data. Escalation must *add*
requirements — more documents, stricter verification settings, or screening not yet run — or it is
toothless. (And if the applicants you route there still need a check the target omits — e.g. AML —
they now **skip** it: the target's *contents*, not its name, decide what actually runs.)
**Stage expensive work behind gates.** Because chaining is cheap and each level only does its own
work, pull a *costly* verification into its own level and gate it behind a condition: run the
cheap, decisive checks first, then incur the expensive one only for applicants who need it. E.g.
do basic identity first and run **AML / watchlist screening** (or liveness, EDD, a paid
data-source lookup, …) only when a condition warrants — higher risk score, specific countries, a
self-declared questionnaire answer. (The trigger must be data you already have — you can't gate AML
on a PEP flag, since that flag *is* AML's output; see *Place each gate at the earliest point*.)
Low-risk applicants finish faster and you don't pay for checks they didn't trigger.
(This is the level-level form of the spine's cheapest-first ordering. *Whether* a given check may
be deferred is a policy call — some screening is mandatory for everyone — but the graph makes the
gating possible.)
**Place each gate at the earliest point its inputs exist — and split gates that mix.** A condition
that reads a level's *output* (e.g. `applicant.review.rejectLabels`, produced by AML) must come
*after* that level; a condition that doesn't (geo / declared country / `poi.country`) belongs
*before* it, so the expensive level is gated. The common mistake is collapsing both into one choice
*after* the costly level. Split them: in the AML pattern, the **embargo** and **high-risk-*country***
checks read only country, so they gate **before** the AML level (you don't pay for AML on someone
you're embargo-rejecting); only the **sanctions / PEP `rejectLabels`** checks — which consume AML's
output — go **after**. Lumping the country checks after AML both wastes the AML run on applicants
you'll reject anyway and flattens the cheapest-decisive-gate-first ordering into a single late
node. A gate reading data nothing upstream has produced yet is also what the validator's
data-availability warnings catch (e.g. `idDocWarning`) — see [workflow-notices.md](workflow-notices.md).
## The reusable primitives
Each idiom is a tiny sub-graph. Compose the spine out of these.
| Idiom | Sub-graph | Node types |
|---|---|---|
| **Hard gate** | condition → final reject | `exclusiveChoice` → `finalRejection` |
| **Soft gate** | condition → manual review | `exclusiveChoice` → `manualReview` |
| **Remediation** | condition → extra level → rejoin the spine **downstream** (forward fan-in — never a back-edge) | branch-off `applicantLevel` |
| **Risk-tier ladder** | else-cascade of conditions, each → tag | one `exclusiveChoice` (ordered out-edges) + `actions` |
| **Flag / workflow-local state** | action writes a tag … a later condition reads it | `actions` → … → `exclusiveChoice` |
| **Escalation** | condition + `on:[approved]` → heavier (superset) level | `exclusiveChoice` → `applicantLevel` |
| **Classification** | tag the class → class-specific sub-pipeline | `actions` → branch |
Two that aren't obvious from the schema:
- **Tags as inter-node state.** A flag pair like `… pending` / `… completed` is a
hand-rolled state machine: an `actions` node sets the tag, a downstream `exclusiveChoice`
routes on `tags contains …`. Tags aren't only output — they're how stages communicate.
Reach for this instead of trying to thread data structurally between nodes.
- **The risk-tier ladder is an else-cascade on one choice.** A single `exclusiveChoice` whose
out-edges are `High` *else→* `Medium` *else→* `Low`, each routing to its own tag action.
Out-edges are evaluated in declared order (first match wins); the final edge with **no**
`condition:`/`on:` is the implicit *else*. This is the idiomatic if / elif / else — one node,
not a chain.
## Iteration without cycles: the resubmission gate
> **Opt-in only — do not build this unless the user explicitly asks for it.** Resubmission
> handling is **not** part of a standard workflow. The engine already retries automatically, and
> that is what almost every workflow wants. Build a gate **only** when the user asks in so many
> words to cap, limit, or otherwise act on repeated attempts ("after 3 tries send to manual
> review", "stop letting them retry forever"). Absent that explicit ask, **never mention
> `resubmission` at all** — leaving it out *is* the correct, complete design. If you're adding it
> "to be thorough" or "because a good KYC flow has it," stop: you're introducing a bug surface
> (see the interlock below) for behavior the user didn't request.
The graph is a **DAG** — no back-edges — so you never draw a "try again" loop. Iteration is the
**engine's** job: when a level returns `resubmission`, it **holds the applicant on that level**
for another attempt (`applicant.review.attemptCnt` counts them). You get this for free by simply
*not* mentioning `resubmission`.
The rest of this section applies **only** once the user has asked for an attempt cap (or similar).
The canonical case is "after N tries, send to manual review instead of looping."
Two primitives make it work:
1. Omitting `on:` makes an edge **decision-agnostic** — it doesn't check the review decision.
2. A resubmitter **stays on the level** unless some branch on the **immediate** post-level choice
names `resubmission` (naming it anywhere opens the gate — an interlock so an approved-oriented
condition can't accidentally release a half-verified applicant).
Together they explain the everyday case: a plain edge effectively serves **approved + rejected**,
and resubmission falls through to retry — not because the edge has a default decision set, but
because resubmission stays put until you open the gate.
So to cap attempts, **name `resubmission` only on the branch that intercepts it, with the
intercept condition on that same branch — on the immediate post-level choice:**
```
idv → gate # plain: level → its choice
gate → manual on:[resubmission] cond: attemptCnt > 3 # cap → escalate to human
gate → approve on:[approved] # verified → continue
# resubmission ≤3 matches nothing on gate → stays on the level & retries
```
**Don't split it.** An unconditional `on:[resubmission]` release feeding a *downstream*
`attemptCnt` gate breaks retry silently: the resubmitter exits on attempt 1 — past the only node
that can hold it — and flows on *as if verified*. The scope is the immediate choice only; once an
applicant leaves the level, normal routing applies.
**The interlock — opening the gate changes every sibling edge.** This is the trap. The moment one
edge on a choice names `resubmission`, the gate is open and resubmission decisions are matched
against **all** of that choice's edges in declared order — including any **decision-agnostic** one.
So a conditioned decision-agnostic edge (e.g. an embargo reject: no `on:`, just a country
condition) will **catch a resubmitter** whose condition is true — an embargoed applicant's *first*
resubmission gets terminally region-rejected instead of being allowed to retry. Therefore:
> **On a choice whose gate is open, every edge must be decision-scoped.** Once you add an
> `on:[resubmission]` branch, give every *other* edge an explicit `on:` (`[approved]`,
> `[rejected]`, …). Only a **bare, condition-less else** is safe to leave open — anything with a
> condition will pull a resubmitter the moment that condition holds. (On a choice with **no**
> `resubmission` branch — the normal case — decision-agnostic terminal rejects are fine; see the
> conventions below. The hazard exists *only* once the gate is open.)
The approve/continue path is `on:[approved]`, not a plain else, for the same reason — a plain else
would also swallow `rejected`.
## Authoring conventions the examples agree on
- **OR the verified and declared slots.** Any user-supplied field is checked in both its
verified form and its entered form (e.g. `fixedInfo.*` OR `info.*`) — testing only one
leaks cases. Geo gates typically OR residence **and** nationality **and** country across
both slots.
- **Policy lives in tiered named client lists**, not hardcoded country arrays — e.g.
per-region `…_low/medium/high_risk_level` and `…_prohibited_and_sanctioned_countries`.
The graph just references the lists; updating policy = editing the list, not the workflow.
- **Keep a small, consistent tag taxonomy** reused across segments: risk-level tags,
process-state flags, entity-class tags.
- **Gate every sequential level transition through a condition node** — a level's own
out-edge is unconditional, and progressing resets verification state, so branching always
happens at an `exclusiveChoice`.
- **One choice per gating point — don't chain choices.** All the gating between the same two
levels belongs on a **single** `exclusiveChoice`: ordered out-edges, first match wins (the
if/elif/else). Two choices with no level or `actions` node between them collapse into one — a
new choice is *earned* only when a level/action sits between the gates. "Two separate policy
gates" is **not** a reason to split: several checks evaluable at the **same point** — e.g.
embargo + high-risk-country + re-attempt right after the entry level — are **one** choice with
ordered branches, not three chained nodes. (What counts as the "same point" is set by data
dependency: a check needing a *later* level's output lives at a later point — see *Place each
gate at the earliest point its inputs exist*.)
Splitting *is* legitimate when it genuinely helps — several paths fanning into one shared
condition (reuse via multiple in-edges), readability, or breaking up an oversized node — but
default to one. (This is an authoring choice now, not the builder's: it no longer
auto-inserts choices, so the chain you write is the chain you get.)
- **A branch that routes onward into a further level or approval carries `on:[approved]`.**
Sending an applicant *deeper into verification* — an EDD/escalation level, a continue path, an
approve action — should gate on `on:[approved]`: only an approved applicant should proceed. The
trap is a decision-agnostic branch that routes *onward*: it silently pulls `rejected` applicants
into a verification/approve path, the same leak as routing `rejected` into auto-approve.
- **Decision-agnostic terminal rejects are safe — but only while the choice's gate is closed.**
On a normal choice (no `resubmission` branch), a hard-stop reject (embargo, sanctions) or a
manual-review escalation (sanctions/PEP label → human review) *should* fire on any decision.
**The instant any edge on that choice names `resubmission`, that stops being safe** — every edge
must then be `on:`-scoped (see *the interlock* under *Iteration without cycles* for why). Since
you only ever open a gate when the user explicitly asked for resubmission handling, this only
arises there.
## Worked topologies in this skill
- [`examples/country-routing.json`](../examples/country-routing.json) — the spine in
miniature: entry → eligibility gate (region-reject vs IDV) → IDV → result choice →
manual-review on rejection (two choices, because the IDV level sits between them).
- [`examples/aml-routing.json`](../examples/aml-routing.json) — eligibility gate +
screening gate + tag-driven fan-in to manual review.
- [`examples/action-workflow.json`](../examples/action-workflow.json) — post-verification
tagging in an action workflow.
references/workflow-schema.md
# ApplicantWorkflow — schema reference
**Sources & authority.** Structure (shapes, fields, enums) reflects the Sumsub
OpenAPI schema (`components.schemas`) and is **schema-authoritative**. Behavioural
semantics (what's honored vs ignored, real validation rules) come from the API owner
and are tagged *(semantics)*. `build_workflow.py` checks payloads against small built-in
sets mirroring the API's enums (node types, operators, `targetType`); the API's
`POST /-/validate` is authoritative for everything else.
## Top-level fields
| Field | Type | Notes |
|---|---|---|
| `name` | enum | **Required.** Workflow *kind* — `default` (verification, auto-runs), `actions` (post-verification action workflow, auto-runs), `test` (isolated; runs only from its draft, launched manually per applicant — **not publishable**, see Lifecycle). Not a slug. The compact spec calls this `kind:`. |
| `title` | string | **Unused by the engine** *(semantics)*. The schema carries it (server defaults it to `"Default"`), but it does not affect behaviour and is not displayed in routing — the skill neither sets nor relies on it. Identify a workflow by `name` + `revision`. |
| `revision` | int | Server-assigned per save. Don't send. |
| `revisionStatus` | enum `draft|published|archived` | Create/update POST only writes `draft` (`published`/`archived` here is rejected). Status changes go through `PUT /{id}/revisionStatus` — **but only for `default`/`actions`; a `test` workflow's `revisionStatus` is immutable (the API rejects the call), so `test` lives only as a draft.** ⚠️ Publishing `default`/`actions` affects **live** traffic — see Lifecycle + the skill's Danger section. |
| `nodes` | array | Flow-graph vertices. See *Node types*. |
| `edges` | array | Directed transitions. May carry `condition` and/or `reviewDecisions`. |
| `notices` | array | Validation hints (`severity: info|error`); `error` blocks publish. **Response-only** — server-populated by `/-/validate`; not part of the write (`UpsertApplicantWorkflowDto`) and not sent on save. |
| `clientId` / `created` / `modified` / `published` / `archived` | — | Server-populated. Don't send. |
## Node types (`ApplicantWorkflowNodeType`)
A node is `{ id, type, name?, description?, disableGoBack?, <familyParams> }` — the
params object key matches the family (`applicantLevel`, `actions`, `finalRejection`,
`applicantTransition`, …). The skill uses these **real schema type names** directly.
The spec also accepts flattened body fields (`levelName`, `labels`, `buttonIds`,
`actions`) as a convenience, lifted into the nested family object on build.
### Standard verification workflow (`kind: default|test`)
| Type | Params |
|---|---|
| `applicantLevel` | `applicantLevel: { levelName }` — references a level by **name**, not id. Optional `disableGoBack`, `resetDocSets`*. |
| `exclusiveChoice` | none — branches via outgoing edges (see *Edges*). |
| `actions` | `actions: { items: [Action] }` — tag/note/sourceKey without changing flow. |
| `manualReview` | none — applicant lands in a review queue. |
| `finalRejection` | `finalRejection: { reviewRejectLabels?: [ReviewLabel], reviewButtonIds?: [string] }` — terminal blocked state. |
### Action workflow (`kind: actions` only)
| Type | Params |
|---|---|
| `actionApplicantLevel` | as `applicantLevel`. |
| `actionExclusiveChoice` | as `exclusiveChoice`. |
| `actionActions` | as `actions`. |
| `actionManualReview` | as `manualReview`. |
| `actionFinalRejection` | as `finalRejection`. |
| `actionApplicantTransition` | `applicantTransition: { applicantLevel: { levelName } }` — hands the verification process **back from the action workflow to the `default` workflow**, entering the named level. *(semantics)* |
- *(semantics)* **`actionXyz` types are valid only in an action workflow (`kind: actions`); standard types only in `default`/`test`. Mixing is rejected** (`standardLevelsInStandardWorkflowsOnly` and friends). The builder enforces this before POST.
- `resetDocSets` and the `And.score` field exist in the schema but **must not be used** in workflows yet (unsupported) — the builder does not expose them.
## Actions (`actions.items[]` — `ApplicantWorkflowAction`)
Shape: `{ type, <familyBody> }`. *(semantics)* **`type` is required and equals the family
key.** The skill supports a subset of `ActionType` (the rest are listed as not-supported below):
| Action | Compact | Body | Notes |
|---|---|---|---|
| `tags` | `{tag: [...]}` or `{tag: {add:[...], remove:[...], target: applicant|applicantAction}}` | `tags: { tags?, tagsToRemove?, targetType? }` | `tags` adds, `tagsToRemove` removes. |
| `notes` | `{note: "text"}` or `{note: {text:"...", target: …}}` | `notes: { note, targetType? }` | |
| `sourceKey` | `{sourceKey: "..."}` | `sourceKey: { sourceKey }` | overrides applicant source key. |
- *(semantics)* **`targetType` default is `applicant`.** `applicantAction` targets the
triggering action and is only available in an **action workflow** (only there is the
applicantAction in the evaluation context). The builder rejects `applicantAction` in a
`default`/`test` workflow.
- **Not author-supported:** `kytCase` (postponed — no public API to obtain `blueprintId`),
`riskScore`, `recheck`. The old skill's `riskLevel` action never existed — it was a
mis-name of `riskScore`; it has been removed.
## Edges & conditions
```json
{ "id":"…", "from":"<node>", "to":"<node>",
"reviewDecisions":["approved","rejected","resubmission"],
"condition": { "or": [ { "and": [ { "op":"eq",
"args":[{"exp":"applicant.country"},{"lit":"\"USA\""}] } ] } ] } }
```
- *(semantics)* **A level node has exactly one out-edge**, and it is **unconditional** —
the API ignores `reviewDecisions`/`condition` on a level's own out-edge and rejects
`>1` level out-edge with `multipleOutEdgesNotSupported`. Branch *after* a level by
routing into an `exclusiveChoice`: one plain edge `level → choice`, then the branches
on the choice's out-edges. The builder **enforces** this — it rejects `on:`/`condition:`
on a level edge (and a level with >1 out-edge); it does **not** synthesize a choice for
you. The same holds for every non-choice node (`actions`, `manualReview`, …): one
unconditional out-edge, never branching.
- *(semantics)* **`reviewDecisions`** (`approved`/`rejected`/`resubmission`, from
`ReviewDecision`) is honored **only on edges leaving an `exclusiveChoice`/
`actionExclusiveChoice`**, matching the upstream level's decision. It is the canonical
way to branch on a level's outcome.
- *(semantics)* Mixed choice out-edges (`reviewDecisions`-gated, `condition`-gated, plain)
are evaluated **in declared order, first match wins**; a plain edge is the catch-all.
**Exception:** an applicant whose decision is `resubmission` is *not* caught by a plain
edge — by default they stay on the level (retry), and they only advance if the immediate
post-level choice explicitly handles `resubmission`. See *Iteration without cycles: the
resubmission gate* in [workflow-patterns.md](workflow-patterns.md).
- *(semantics)* **A decision that matches none of a choice's out-edges is terminal in that
state** — an `approved` applicant with no matching out-edge simply ends approved (this is why
examples can leave `approved`/`rejected` unrouted). This is distinct from a choice with **zero**
out-edges, which strands every applicant and the builder rejects (*Common gotchas*).
`resubmission` is the exception above: no match means **stay-and-retry**, not terminal.
### Condition AST (`Condition`)
Authored directly on an edge as `condition:`. Shape:
```
Condition = { or: [And] (1..30) } # negate? exists — NOT UI-supported; builder rejects it
And = { and: [Criterion] (1..30) } # negate? honored by the engine; score? unsupported
Criterion = { op: Op, args: [Arg] (1..10) }
Arg = { exp: string(≤512) } | { lit: string(≤1024) } # exp = raw path; lit = JSON-encoded value
```
- It is an **OR of AND-groups of criteria**.
- `Arg` is a keyed union: `{exp}` (a raw expression path) **or** `{lit}` (a literal,
supplied already JSON-encoded as a string — see *Literal encoding*). Both args of a
comparison may be `{exp}` (field-to-field, or a client-list RHS).
- *(semantics)* **Express negation with the `not*` operators** — `notContains`, `notIn`,
`notEmpty`, `notStartsWith`, `notEndsWith`, `notMatch`, `ne`, `neIgnoreCase`,
`notContainsAny`. Do **not** set a `negate` flag: **`Condition.negate` (top level) is
not UI-supported and the builder rejects it.** `And.negate` *is* honored by the engine
if hand-written (the UI doesn't expose it); `And.score` is unsupported.
- `op: empty` / `op: notEmpty` take a single `{exp}` arg; most ops take `[{exp}, {lit}]`.
### Operators (`Op`)
`eq eqIgnoreCase neIgnoreCase eqOrNull eqIgnoreCaseOrNull ne lt lte gt gte match notMatch
in notIn startsWith notStartsWith endsWith notEndsWith empty notEmpty contains notContains
containsAny notContainsAny containsAll containsOnly`
- The list above is the full set; `build_workflow.py` validates every authored
condition's operator against it.
- **`call` is reserved** (exists in the enum, not exposed) — the builder rejects it.
### Literal encoding
`lit` carries a **JSON-encoded value as a string** — write it that way directly (the
API rejects an un-encoded literal with `syntaxError`):
```
"USA" → "\"USA\"" 3 → "3" true → "true" ["USA","DEU"] → "[\"USA\", \"DEU\"]"
```
(`exp`, by contrast, is the raw path with no encoding: `{"exp": "applicant.country"}`.)
## Expression paths (left-hand side of comparisons)
The authoritative inventory of every legal `exp` path is **[`workflow-expressions.md`](workflow-expressions.md)** (a lookup dictionary, sourced separately from the expression-context vocabulary — *not* from `components.schemas`). Grep by leaf field name. Cheat sheet of common patterns:
| Path | Use case |
|---|---|
| `applicant.country` | Route / reject by ISO-3 country. |
| `poi.country` | Country from the proof-of-identity document. |
| `applicant.review.attemptCnt` | "Is this the Nth re-attempt?" |
| `applicant.fixedInfo.firstName` | Direct profile field. |
| `questionnaires.<qId>.<sectionId>.<itemId>` | Questionnaire answer. |
| `checks.<checkName>.<field>` | Automated-check outputs. |
| `applicant.review.rejectLabels` | AML/check result labels — `contains PEP`, `containsAny [SANCTIONS, ADVERSE_MEDIA]`. The canonical post-AML branch. |
| `applicant.review.reviewAnswer` | `GREEN` / `RED` overall answer. |
| `applicant.tags` | Tags set upstream by `actions` nodes — route with `contains` / `containsAny` (tag-as-state-machine). |
| `clientLists.<name>` | A **tenant-defined named list** (dashboard-maintained). Used as the **RHS** of `in` / `notIn` / `containsAny`: `poi.country in clientLists.high_risk_countries_list`. Not creatable via this skill; an unknown name validates as `invalidExpression`. |
| `random` | Random-bucket A/B sampling. |
Paths absent from `workflow-expressions.md` resolve to "empty" at runtime — wrap unverified paths with `notEmpty` so the edge fails closed.
## Lifecycle
1. **Create as draft** — `POST /resources/api/agent/applicantWorkflows`, `revisionStatus: draft` (default). App Token + HMAC; permission `manageWorkflows`. Safe — drafts route no traffic. **One draft per workflow:** a no-`id` POST when a draft of this `name` exists returns `409` — update that draft in place instead. Check first with `scripts/workflow_api.py state`.
2. **Edit** — POST again with the same `id` to update the **draft** in place. Published/archived revisions are read-only; to change a published one, `POST /{id}/draft` to fork a new draft from it — subject to the one-draft rule (`409` if a draft already exists; edit that draft instead). Update-in-place (POST with the draft's `id`) is the **only** way to overwrite an existing draft — both a no-`id` POST and `fork` `409` when the slot is taken.
3. **Validate without saving** — `POST /…/-/validate` with `{name, nodes, edges}`. Returns `notices[]`; `error` severity blocks publish. The API's validate is authoritative — the builder's client-side checks just give faster feedback. *(semantics)*
4. **Publish / archive** — `PUT /…/{id}/revisionStatus`, **for `default`/`actions` only**. Publishing **auto-archives** the prior published revision. ⚠️ **Revisions are shared across live and sandbox; only applicants are isolated — publishing `default`/`actions` changes real production routing.** Gated by the workflow's **current live exposure** (the traffic on the currently-published revision, step 6 below) — see SKILL.md's Danger section for the full gating policy and step 8 for the flow. Rollback by re-publishing the previously-published revision id. **`test` has no publish/archive step — its `revisionStatus` is immutable (the API rejects the call); it runs from its draft.**
5. **Per-applicant runs** are stored separately as `ApplicantWorkflowRun`, visible per-applicant in the dashboard.
6. **Traffic check (pre-publish guard)** — `GET /…/{id}/traffic` → `{"applicantCount": N}`, approximate applicants recently on this revision's levels. ⚠️ **Level-derived, not workflow-routed** — revisions sharing level names report overlapping counts. `0` = no recent traffic; `>0` = those levels are live.
### Revision continuity — keep node/edge ids sticky when editing *(semantics)*
The engine upgrades **in-flight applicant runs** onto a newly published revision using
matching strategies keyed on **node id** and **edge id**. The
dashboard editor forks a draft from the last published revision and preserves existing
node/edge ids through read-modify-update cycles — so ids are normally **sticky** across
revisions and runs upgrade cleanly.
When this skill *edits* an existing workflow (forking a published revision, or updating a
draft that descends from one), do the same: **GET the revision you're basing on first and
carry its node and edge ids through verbatim for every element you keep — mint new ids only
for genuinely new nodes/edges.** Rebuilding from a fresh spec with new ids isn't an error,
but it defeats id-matching, so the engine falls back to weaker strategies (it may re-enter a
run at a level node, skip the upgrade, or otherwise diverge — the outcome is strategy-
dependent, not guaranteed). The builder cooperates: it emits node `id` verbatim and passes
an edge `id` through whenever the spec supplies one. For a brand-new workflow, ids don't
matter — there are no prior runs to upgrade.
## Constraints (product semantics)
- **Entry node required**: ≥1 `applicantLevel` with no incoming edges — and there is **no upper bound**. A workflow is a **forest**: each entry level roots an independent flow and the graph need not be connected. Small workflows have one or a few roots; large consolidated ones routinely have **dozens** (e.g. a single `default` workflow holding KYC bases per region *and* KYB bases per entity class — regulated / non-regulated / tech-provider / reliance / entity-linked — each its own root).
- **An applicant's type is fixed and cannot change mid-workflow** *(semantics)*. So flows for different applicant types — e.g. **KYC (individual) vs KYB (company)** — live as **separate, non-intersecting components in the same workflow**, each entered by a type-appropriate level. Never bridge them with an edge: an applicant can't switch type, so a transition from an individual level into a company level (or vice versa) is invalid. A single `default` workflow commonly holds many such isolated flows.
- **Each verification level appears at most once** in a workflow.
- **All levels in a workflow should use the same WebSDK version** — dashboard-warned, not server-enforced.
- **Sequential level transitions reset verification state** — gate progression through a `condition` node.
## Common gotchas
- **`levelName` is the level's *name*, not its id.** Unknown names → the applicant stalls (`levelNotFound` at validate).
- **`condition` node with no branching out-edge** — saves, but applicants have nowhere to go. The builder rejects it upfront.
- **`reviewRejectLabels`** must be `ReviewLabel` enum values (validated by the API at `POST /-/validate`). Button IDs come from the dashboard's moderation-buttons config.
scripts/build_workflow.py
#!/usr/bin/env python3
"""
Assemble a workflow spec (JSON on stdin) into a full Sumsub `ApplicantWorkflow`
payload (JSON on stdout).
Spec format: see SKILL.md.
This is a thin assembler + validator, NOT a translator. Nodes use the real
schema node-type names; edge conditions are the real Sumsub AST authored
directly (`{or:[{and:[{op, args:[{exp},{lit}]}]}]}`), where:
- `{exp: "<raw path>"}` is an expression path, verbatim (incl. bracket paths).
- `{lit: "<json>"}` is a literal, given **already JSON-encoded as a string**
the way the API stores it ("USA" → "\"USA\"", 3 → "3",
["A","B"] → "[\"A\", \"B\"]"). The API rejects an
un-encoded literal, so the encoding is mandatory.
What the assembler does (and only this):
- Validates node types, operators, action targetType, and `lit` length against
small built-in known sets, and rejects a top-level `Condition.negate`. (Review
labels, levels, and client lists are left to the API's authoritative validate.)
- Enforces the edge invariant: only `exclusiveChoice` nodes may branch or gate;
every other node has at most one unconditional out-edge (no auto-insert — author
the choice explicitly).
- Graph validation: dangling edges, duplicate ids, missing required fields,
kind/node-type coherence.
- Convenience: node bodies may be flattened (`levelName`, `labels`, `actions`,
`buttonIds`, `disableGoBack`) or written in the real nested form; `on:` is a
shorthand for `reviewDecisions`.
"""
import json
import sys
from collections import Counter, defaultdict
# ---------- known validation sets --------------------------------------------
# Small, stable sets the assembler checks against so typos and unsupported
# constructs fail here — with a precise, enumerated message — before any network
# call. They mirror the API's enums; `POST /-/validate` is authoritative for
# everything else (levels, client lists, review labels, transitions).
KNOWN_NODE_TYPES = {
"actionActions", "actionApplicantLevel", "actionApplicantTransition",
"actionExclusiveChoice", "actionFinalRejection", "actionManualReview",
"actions", "applicantLevel", "exclusiveChoice", "finalRejection", "manualReview",
}
ACTION_PREFIXED_NODE_TYPES = {
"actionActions", "actionApplicantLevel", "actionApplicantTransition",
"actionExclusiveChoice", "actionFinalRejection", "actionManualReview",
}
REVIEW_DECISIONS = {"approved", "rejected", "resubmission"}
TARGET_TYPES = {"applicant", "applicantAction"}
OPERATORS = {
"eq", "eqIgnoreCase", "neIgnoreCase", "eqOrNull", "eqIgnoreCaseOrNull", "ne",
"lt", "lte", "gt", "gte", "match", "notMatch", "in", "notIn",
"startsWith", "notStartsWith", "endsWith", "notEndsWith", "empty", "notEmpty",
"contains", "notContains", "containsAny", "notContainsAny", "containsAll",
"containsOnly",
}
RESERVED_OPERATORS = {"call"}
# Node-type groups (real schema names). Sumsub rejects mixing standard and action
# node types in one workflow: action-* types only belong in an action workflow
# (kind="actions"); the standard types only in a verification workflow
# (kind="default"|"test").
LEVEL_NODE_TYPES = {"applicantLevel", "actionApplicantLevel"}
ACTIONS_NODE_TYPES = {"actions", "actionActions"}
REJECT_NODE_TYPES = {"finalRejection", "actionFinalRejection"}
REVIEW_NODE_TYPES = {"manualReview", "actionManualReview"}
CHOICE_NODE_TYPES = {"exclusiveChoice", "actionExclusiveChoice"}
TRANSITION_NODE_TYPES = {"actionApplicantTransition"}
def _list(v):
return v if isinstance(v, list) else [v]
# ---------- action item builders ----------------------------------------------
# Author-supported actions: tags / notes / sourceKey. (kytCase is postponed — no
# public API for blueprintId yet; riskScore/recheck are not supported.)
def _build_tags_action(v) -> dict:
"""`{tag: [...]}` (add) or `{tag: {add:[...], remove:[...], target:applicant|applicantAction}}`."""
body = {}
if isinstance(v, dict):
if v.get("add") is not None:
body["tags"] = _list(v["add"])
if v.get("remove") is not None:
body["tagsToRemove"] = _list(v["remove"])
if not body.get("tags") and not body.get("tagsToRemove"):
raise ValueError("tag action needs 'add' and/or 'remove'")
_set_target(body, v)
else:
body["tags"] = _list(v)
return {"type": "tags", "tags": body}
def _build_notes_action(v) -> dict:
"""`{note: "text"}` or `{note: {text:"...", target:applicant|applicantAction}}`."""
if isinstance(v, dict):
text = v.get("text", v.get("note"))
if not text:
raise ValueError("note action needs 'text'")
body = {"note": str(text)}
_set_target(body, v)
else:
body = {"note": str(v)}
return {"type": "notes", "notes": body}
def _set_target(body: dict, src: dict) -> None:
tgt = src.get("target") or src.get("targetType")
if tgt is None:
return
if tgt not in TARGET_TYPES:
raise ValueError(f"targetType {tgt!r} not in {sorted(TARGET_TYPES)}")
body["targetType"] = tgt
ACTION_ITEM_TYPES = {
"tag": _build_tags_action,
"note": _build_notes_action,
"sourceKey": lambda v: {"type": "sourceKey", "sourceKey": {"sourceKey": str(v)}},
}
# ---------- condition validation ----------------------------------------------
# Maximum length of a single `lit` value in a condition argument. A literal longer
# than this almost always signals a mistake (an expression mistyped as a string, a
# pasted blob) rather than a real comparison value.
MAX_LIT_LENGTH = 1024
def _validate_condition_ops(cond) -> None:
"""Walk a hand-authored condition AST and:
- reject any `op` not in the known operator set (catches typos and the reserved
`call` op),
- reject a top-level `Condition.negate` — it is not UI-supported; negate via
the not* operators (notContains, notIn, notEmpty, ne, …) instead,
- reject a `lit` value longer than MAX_LIT_LENGTH.
`lit` values are passed through verbatim (the author supplies them already
JSON-encoded, as the API stores them); this function does not transform them."""
if not isinstance(cond, dict):
return
if cond.get("negate"):
raise ValueError("top-level Condition.negate is not supported; use a not* operator instead")
for branch in cond.get("or", []) or []:
for crit in (branch.get("and", []) if isinstance(branch, dict) else []) or []:
if not isinstance(crit, dict):
continue
op = crit.get("op")
if op is not None:
if op in RESERVED_OPERATORS:
raise ValueError(f"operator {op!r} is reserved and not exposed by this skill")
if op not in OPERATORS:
raise ValueError(f"unknown operator {op!r}; allowed: {sorted(OPERATORS)}")
for arg in crit.get("args", []) or []:
if isinstance(arg, dict) and "lit" in arg and isinstance(arg["lit"], str) and len(arg["lit"]) > MAX_LIT_LENGTH:
raise ValueError(f"literal value exceeds the {MAX_LIT_LENGTH}-character limit ({len(arg['lit'])} chars)")
# ---------- node / edge / action builders -------------------------------------
def _build_action_item(item: dict) -> dict:
"""Convert a compact action item ({tag:...} / {note:...} / ...) to Sumsub shape."""
if not isinstance(item, dict) or len(item) != 1:
raise ValueError(f"action item must be a single-key dict; got {item!r}")
key, val = next(iter(item.items()))
if key not in ACTION_ITEM_TYPES:
raise ValueError(
f"unknown or unsupported action item kind {key!r}; allowed: {sorted(ACTION_ITEM_TYPES)}. "
f"(kytCase is not author-supported yet; riskScore/recheck are not supported.)"
)
return ACTION_ITEM_TYPES[key](val)
def _build_node(spec: dict) -> dict:
if "id" not in spec:
raise ValueError(f"node missing 'id': {spec!r}")
if "type" not in spec:
raise ValueError(f"node {spec['id']!r} missing 'type'")
node_type = spec["type"]
if node_type not in KNOWN_NODE_TYPES:
raise ValueError(f"node {spec['id']!r}: unknown type {node_type!r}; allowed: {sorted(KNOWN_NODE_TYPES)}")
node = {"id": spec["id"], "type": node_type}
if spec.get("name") is not None:
node["name"] = spec["name"]
if spec.get("description") is not None:
node["description"] = str(spec["description"])
if node_type in LEVEL_NODE_TYPES:
level_name = spec.get("levelName") or (spec.get("applicantLevel") or {}).get("levelName")
if not level_name:
raise ValueError(f"node {spec['id']!r}: type {node_type} requires 'levelName'")
node["applicantLevel"] = {"levelName": level_name}
if spec.get("disableGoBack") is not None:
node["disableGoBack"] = bool(spec["disableGoBack"])
elif node_type in TRANSITION_NODE_TYPES:
# actionApplicantTransition: hands the verification process back from an
# action workflow to the default workflow, entering the named level.
level_name = spec.get("levelName") or (spec.get("applicantLevel") or {}).get("levelName")
if not level_name:
raise ValueError(f"node {spec['id']!r}: type {node_type} requires 'levelName' (the default-workflow level to transition into)")
node["applicantTransition"] = {"applicantLevel": {"levelName": level_name}}
elif node_type in ACTIONS_NODE_TYPES:
items_in = spec.get("actions") or []
if not items_in:
raise ValueError(f"node {spec['id']!r}: type {node_type} requires non-empty 'actions'")
node["actions"] = {"items": [_build_action_item(it) for it in items_in]}
elif node_type in REJECT_NODE_TYPES:
labels = spec.get("labels")
button_ids = spec.get("buttonIds")
if not labels and not button_ids:
raise ValueError(f"node {spec['id']!r}: type {node_type} requires 'labels' or 'buttonIds'")
node["finalRejection"] = {}
if labels:
node["finalRejection"]["reviewRejectLabels"] = list(labels)
if button_ids:
node["finalRejection"]["reviewButtonIds"] = list(button_ids)
elif node_type in CHOICE_NODE_TYPES or node_type in REVIEW_NODE_TYPES:
pass # only id / type / name / description
# Pass-through unknown keys (escape hatch)
handled = {"id", "type", "name", "description", "levelName", "applicantLevel",
"actions", "labels", "buttonIds", "disableGoBack"}
for k, v in spec.items():
if k in handled or v is None:
continue
node[k] = v
return node
def _build_edge(spec: dict, node_ids: set) -> dict:
if "from" not in spec or "to" not in spec:
raise ValueError(f"edge missing 'from'/'to': {spec!r}")
if spec["from"] not in node_ids:
raise ValueError(f"edge {spec!r}: 'from' id {spec['from']!r} not in nodes")
if spec["to"] not in node_ids:
raise ValueError(f"edge {spec!r}: 'to' id {spec['to']!r} not in nodes")
edge = {"from": spec["from"], "to": spec["to"]}
if spec.get("id"):
edge["id"] = spec["id"]
# reviewDecisions ('on:' is a shorthand for the real `reviewDecisions`)
on = spec.get("on") or spec.get("reviewDecisions")
if on is not None:
on_list = _list(on)
for v in on_list:
if v not in REVIEW_DECISIONS:
raise ValueError(f"edge {spec['from']}->{spec['to']}: reviewDecisions {v!r} not in {sorted(REVIEW_DECISIONS)}")
edge["reviewDecisions"] = on_list
# Guard the removed expression shortcuts so old specs fail loudly, not silently.
for legacy in ("when", "whenRaw"):
if legacy in spec:
raise ValueError(
f"edge {spec['from']}->{spec['to']}: '{legacy}:' is no longer supported. "
f"Write the condition AST directly under 'condition:' "
f"(e.g. {{op: eq, args: [{{exp: \"applicant.country\"}}, {{lit: \"\\\"USA\\\"\"}}]}}); see SKILL.md."
)
# condition: the real Sumsub AST, authored directly and passed through verbatim.
if spec.get("condition") is not None:
edge["condition"] = spec["condition"]
try:
_validate_condition_ops(edge["condition"])
except ValueError as e:
raise ValueError(f"edge {spec['from']}->{spec['to']}: {e}")
return edge
# ---------- edge invariant: only choices branch ------------------------------
def _enforce_edge_invariant(nodes: list, edges: list) -> None:
"""Only `exclusiveChoice`/`actionExclusiveChoice` nodes may branch (>1 out-edge)
or gate (`reviewDecisions`/`condition` on an out-edge). Every other node has at
most one *unconditional* out-edge — a level/action transition is singular and
plain.
To branch a level's outcome, author an explicit choice and put the branches on
*its* out-edges; the builder never synthesises a choice for you. `reviewDecisions`
on a choice out-edge match the review decision of the upstream level.
"""
type_of = {n["id"]: n["type"] for n in nodes}
grouped = defaultdict(list)
for e in edges:
grouped[e["from"]].append(e)
for nid, outs in grouped.items():
if type_of.get(nid) in CHOICE_NODE_TYPES:
continue
if len(outs) > 1:
raise ValueError(
f"node {nid!r} has {len(outs)} out-edges — only an exclusiveChoice may "
f"branch. Route its outcome through a choice: add an exclusiveChoice, point "
f"{nid!r} at it with one plain edge, and put the branches on the choice's "
f"out-edges."
)
gated = next(
(e for e in outs if ("reviewDecisions" in e) or ("condition" in e)), None
)
if gated is not None:
raise ValueError(
f"edge {nid}->{gated['to']}: a {type_of.get(nid)!r} node's out-edge is "
f"unconditional — it can't carry on:/condition. Branch the outcome at an "
f"exclusiveChoice: {nid} -> <choice> (one plain edge), then put on:/condition "
f"on the choice's out-edges."
)
# ---------- top-level --------------------------------------------------------
# The API's `name` field is a fixed enum naming the *kind* of workflow. There is
# exactly one workflow of each kind; a save creates a new draft revision of it.
# Compact spec exposes this as `kind:`. (`title` exists in the schema but is unused
# by the engine, so the builder neither requires nor emits it.)
WORKFLOW_KINDS = ("default", "test", "actions")
def build_workflow(spec: dict) -> dict:
kind = spec.get("kind", "default")
if kind not in WORKFLOW_KINDS:
raise ValueError(
f"workflow 'kind' must be one of {WORKFLOW_KINDS}; got {kind!r}. "
f"The API's `name` field is an enum (default/test/actions), not a slug."
)
nodes_in = spec.get("nodes") or []
if not nodes_in:
raise ValueError("workflow must have at least one node")
nodes = [_build_node(n) for n in nodes_in]
# Duplicate-id check
dupes = [iid for iid, c in Counter(n["id"] for n in nodes).items() if c > 1]
if dupes:
raise ValueError(f"duplicate node ids: {dupes}")
# kind/node-type coherence: action-* node types only in action workflows,
# standard types only in verification workflows. Sumsub rejects mixes.
if kind == "actions":
non_action = [
n["id"] for n in nodes if n["type"] not in ACTION_PREFIXED_NODE_TYPES
]
if non_action:
raise ValueError(
f"kind='actions' workflow contains non-action node(s) {non_action}. "
f"Inside an action workflow use the action-* node types "
f"(actionApplicantLevel, actionExclusiveChoice, actionActions, "
f"actionManualReview, actionFinalRejection, actionApplicantTransition)."
)
else: # default / test — standard verification workflow
action_only = [
n["id"] for n in nodes if n["type"] in ACTION_PREFIXED_NODE_TYPES
]
if action_only:
raise ValueError(
f"kind={kind!r} workflow contains action-* node(s) {action_only}. "
f"Use standard node types (applicantLevel, exclusiveChoice, actions, "
f"manualReview, finalRejection) for a verification workflow, or set "
f"kind='actions' for a post-verification action workflow."
)
# `applicantAction` tag/note targeting is only available in action workflows,
# because only there is the applicantAction in the evaluation context.
bad_target = [
n["id"] for n in nodes
for it in (n.get("actions", {}).get("items", []) if n["type"] in ACTIONS_NODE_TYPES else [])
for fam in ("tags", "notes")
if it.get(fam, {}).get("targetType") == "applicantAction"
]
if bad_target:
raise ValueError(
f"kind={kind!r} workflow uses targetType='applicantAction' on node(s) {bad_target}. "
f"That target is only available inside an action workflow (kind='actions')."
)
node_ids = {n["id"] for n in nodes}
edges_in = spec.get("edges") or []
edges = [_build_edge(e, node_ids) for e in edges_in]
# Only choice nodes may branch or gate; every other node has one plain out-edge.
_enforce_edge_invariant(nodes, edges)
# Every condition node should have ≥1 outgoing edge that actually branches —
# a `condition` or a `reviewDecisions` ('on:') gate.
for n in nodes:
if n["type"] in CHOICE_NODE_TYPES:
outs = [e for e in edges if e["from"] == n["id"]]
if not outs:
raise ValueError(f"condition node {n['id']!r} has no outgoing edges")
if not any(("condition" in e) or ("reviewDecisions" in e) for e in outs):
raise ValueError(
f"condition node {n['id']!r} must have at least one outgoing edge "
f"with a 'condition' clause or an 'on:' (reviewDecisions) gate"
)
revision_status = spec.get("revisionStatus", "draft")
if revision_status != "draft":
raise ValueError(
f"revisionStatus must be 'draft' on create (got {revision_status!r}); "
"the create/update POST only writes drafts — publishing is a separate, gated "
"step via PUT /{id}/revisionStatus (see the skill's Danger section)"
)
payload = {
"name": kind,
"revisionStatus": revision_status,
"nodes": nodes,
"edges": edges,
}
# Preserve id for upsert (POST with existing id updates in place).
if spec.get("id") is not None:
payload["id"] = spec["id"]
# UpsertApplicantWorkflowDto accepts only {name, nodes, edges, id, revision,
# revisionStatus, title}. `notices` is response-only, `layout` is server
# auto-arranged, and `desc` no longer exists in the schema — none are sent.
return payload
def main():
try:
spec = json.load(sys.stdin)
except ValueError as e:
print(f"error: invalid JSON on stdin: {e}", file=sys.stderr)
sys.exit(2)
try:
payload = build_workflow(spec)
except ValueError as e:
print(f"error: {e}", file=sys.stderr)
sys.exit(2)
json.dump(payload, sys.stdout, indent=2)
sys.stdout.write("\n")
if __name__ == "__main__":
main()
scripts/post_workflow.sh
#!/usr/bin/env bash
# POST a built ApplicantWorkflow payload to the Sumsub API.
#
# Authenticates via App Token + secret (HMAC-SHA256) per
# https://docs.sumsub.com/reference/authentication.
#
# Usage:
# SUMSUB_APP_TOKEN=sbx:... \
# SUMSUB_SECRET_KEY=... \
# ./post_workflow.sh /path/to/workflow.json
#
# Refuses non-sandbox tokens unless SUMSUB_ALLOW_PROD=1.
# Override SUMSUB_BASE only for testing; default is https://api.sumsub.com.
#
# Prints the response body followed by a final line: HTTP <code>
set -euo pipefail
: "${SUMSUB_APP_TOKEN:?SUMSUB_APP_TOKEN is required (sandbox App Token, 'sbx:' prefix)}"
: "${SUMSUB_SECRET_KEY:?SUMSUB_SECRET_KEY is required (paired secret key)}"
BASE="${SUMSUB_BASE:-https://api.sumsub.com}"
if [[ "${SUMSUB_APP_TOKEN}" != sbx:* && "${SUMSUB_ALLOW_PROD:-0}" != "1" ]]; then
echo "error: SUMSUB_APP_TOKEN does not look like a sandbox token (expected 'sbx:' prefix)." >&2
echo " Production credentials must not be shared with this skill." >&2
exit 3
fi
# Payload comes from $1 (file path), stdin if no arg, or "-" for explicit stdin.
PAYLOAD="${1:--}"
if [[ "${PAYLOAD}" == "-" ]]; then
PAYLOAD="$(mktemp)"
trap 'rm -f "${PAYLOAD}"' EXIT
cat > "${PAYLOAD}"
elif [[ ! -f "${PAYLOAD}" ]]; then
echo "payload file not found: ${PAYLOAD}" >&2
exit 2
fi
if [[ ! -s "${PAYLOAD}" ]]; then
echo "error: payload is empty (no file content, or stdin closed without data)" >&2
exit 2
fi
METHOD="POST"
PATH_Q="/resources/api/applicantWorkflows"
TS="$(date -u +%s)"
SIG="$(
{ printf '%s%s%s' "${TS}" "${METHOD}" "${PATH_Q}"; cat "${PAYLOAD}"; } \
| openssl dgst -sha256 -hmac "${SUMSUB_SECRET_KEY}" -hex \
| awk '{print $NF}'
)"
curl -sS -X "${METHOD}" \
-H "X-App-Token: ${SUMSUB_APP_TOKEN}" \
-H "X-App-Access-Ts: ${TS}" \
-H "X-App-Access-Sig: ${SIG}" \
-H "X-Agent-Source: sumsub-skills" \
-H "X-Agent-Source-Ver: 1.0.1" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data-binary "@${PAYLOAD}" \
-w '\nHTTP %{http_code}\n' \
"${BASE%/}${PATH_Q}"
scripts/publish_workflow.sh
#!/usr/bin/env bash
# Promote a workflow revision to a target status.
#
# Authenticates via App Token + secret (HMAC-SHA256) per
# https://docs.sumsub.com/reference/authentication.
#
# Usage:
# SUMSUB_APP_TOKEN=sbx:... \
# SUMSUB_SECRET_KEY=... \
# ./publish_workflow.sh <workflow-id> [draft|published|archived]
#
# Default status is `published`. Drafts ship in `draft` so this script is the
# explicit "go live" step. Pass `archived` to retire a previously-published
# revision; pass `draft` to revert an over-eager publish (admins only).
#
# Refuses non-sandbox tokens unless SUMSUB_ALLOW_PROD=1.
# Override SUMSUB_BASE only for testing; default is https://api.sumsub.com.
#
# Prints the response body followed by a final line: HTTP <code>
set -euo pipefail
: "${SUMSUB_APP_TOKEN:?SUMSUB_APP_TOKEN is required (sandbox App Token, 'sbx:' prefix)}"
: "${SUMSUB_SECRET_KEY:?SUMSUB_SECRET_KEY is required (paired secret key)}"
BASE="${SUMSUB_BASE:-https://api.sumsub.com}"
if [[ "${SUMSUB_APP_TOKEN}" != sbx:* && "${SUMSUB_ALLOW_PROD:-0}" != "1" ]]; then
echo "error: SUMSUB_APP_TOKEN does not look like a sandbox token (expected 'sbx:' prefix)." >&2
echo " Production credentials must not be shared with this skill." >&2
exit 3
fi
if [[ $# -lt 1 ]]; then
echo "usage: $0 <workflow-id> [draft|published|archived]" >&2
exit 2
fi
WORKFLOW_ID="$1"
STATUS="${2:-published}"
case "${STATUS}" in
draft|published|archived) ;;
*)
echo "error: status must be one of: draft, published, archived (got '${STATUS}')" >&2
exit 2
;;
esac
METHOD="PUT"
PATH_Q="/resources/api/applicantWorkflows/${WORKFLOW_ID}/revisionStatus"
TS="$(date -u +%s)"
BODY="$(printf '{"revisionStatus":"%s"}' "${STATUS}")"
SIG="$(
printf '%s%s%s%s' "${TS}" "${METHOD}" "${PATH_Q}" "${BODY}" \
| openssl dgst -sha256 -hmac "${SUMSUB_SECRET_KEY}" -hex \
| awk '{print $NF}'
)"
curl -sS -X "${METHOD}" \
-H "X-App-Token: ${SUMSUB_APP_TOKEN}" \
-H "X-App-Access-Ts: ${TS}" \
-H "X-App-Access-Sig: ${SIG}" \
-H "X-Agent-Source: sumsub-skills" \
-H "X-Agent-Source-Ver: 1.0.1" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data-binary "${BODY}" \
-w '\nHTTP %{http_code}\n' \
"${BASE%/}${PATH_Q}"
scripts/workflow_api.py
#!/usr/bin/env python3
"""Signed Sumsub ApplicantWorkflow API client — one CLI for every network step.
Subcommands (each signs with App Token + secret, HMAC-SHA256):
state <default|actions|test> Show the current draft/published revisions
of a workflow name and the right write mode.
get <id> Read one revision's full definition by id
(e.g. to reuse node/edge ids when editing,
or to back a draft up to a file).
traffic <id> Recent applicants on a revision's levels.
validate [file|-] Dry-run validate a built payload (stores
nothing). Reads stdin if no file.
post [file|-] Create/update a draft from a built payload.
fork <id> Fork a new draft from a published/archived
revision (POST /{id}/draft).
publish <id> [published|archived|draft]
Change a revision's status. GATED — see below.
Auth & environment (shared by all subcommands):
SUMSUB_APP_TOKEN sandbox App Token ('sbx:' prefix). Non-sandbox tokens are
refused unless SUMSUB_ALLOW_PROD=1.
SUMSUB_SECRET_KEY paired secret.
SUMSUB_BASE API base; default https://api.sumsub.com. Override only for
local/dev testing.
⚠️ publish affects LIVE production traffic. Workflow revisions are SHARED across
live and sandbox; only *applicants* are isolated. Publishing a `default`/`actions`
revision changes the workflow that handles real production verifications/actions —
a sandbox token does NOT make this safe.
`publish` is gated by the workflow's CURRENT LIVE EXPOSURE — the recent applicant
traffic on the revision that is currently `published` (the one this change would
auto-archive):
• no published revision exists yet, OR its level traffic <= threshold
-> proceeds unattended (low/zero exposure; no latch needed).
• traffic > threshold, OR exposure cannot be determined (a list/traffic read
fails) -> requires the arming latch SUMSUB_ALLOW_WORKFLOW_PUBLISH=1
(fail-safe: an unreadable exposure is treated as dangerous).
Threshold defaults to 400; override with SUMSUB_PUBLISH_TRAFFIC_THRESHOLD. The
count is LEVEL-derived (see the `traffic` subcommand) — how busy this workflow's
levels are now, not the blast radius of the new revision going live. `test` is not
publishable at all (the API rejects a revisionStatus change); the gate skips it
and defers to the API.
Output: each subcommand prints the response body, then a final `HTTP <code>` line
(except `state`, which prints a human summary). Gate decisions print to stderr.
"""
import hashlib
import hmac
import json
import os
import re
import subprocess
import sys
import time
from typing import NoReturn
WF_PATH = "/resources/api/agent/applicantWorkflows"
def die(msg, code) -> NoReturn:
print(msg, file=sys.stderr)
sys.exit(code)
def env():
token = os.environ.get("SUMSUB_APP_TOKEN")
secret = os.environ.get("SUMSUB_SECRET_KEY")
if not token:
die("error: SUMSUB_APP_TOKEN is required (sandbox App Token, 'sbx:' prefix)", 2)
if not secret:
die("error: SUMSUB_SECRET_KEY is required (paired secret key)", 2)
if not token.startswith("sbx:") and os.environ.get("SUMSUB_ALLOW_PROD") != "1":
die("error: SUMSUB_APP_TOKEN does not look like a sandbox token (expected 'sbx:' "
"prefix).\n Production credentials must not be shared with this skill.", 3)
base = os.environ.get("SUMSUB_BASE", "https://api.sumsub.com").rstrip("/")
return token, secret, base
def request(method, path, body: "bytes | str" = b""):
"""Signed request via curl. Returns (http_status:int, body:str). status 0 = network error.
Signature payload is ts + method + path + body (the form the API expects).
The HTTP transport is `curl` (not urllib) so the request goes through the same
binary the test harness intercepts; signing and gating stay in Python."""
token, secret, base = ENV
if isinstance(body, str):
body = body.encode()
ts = str(int(time.time()))
sig = hmac.new(secret.encode(), ts.encode() + method.encode() + path.encode() + body,
hashlib.sha256).hexdigest()
headers = {
"X-App-Token": token,
"X-App-Access-Ts": ts,
"X-App-Access-Sig": sig,
"X-Agent-Source": "sumsub-skills",
"X-Agent-Source-Ver": "1.4.1",
"Accept": "application/json",
}
# `-w '\nHTTP %{http_code}\n'` appends the status as a trailing line so we can
# read it back off stdout (curl's exit code alone doesn't carry 4xx/5xx).
cmd = ["curl", "-sS", "-X", method, base + path, "-w", "\nHTTP %{http_code}\n"]
for k, v in headers.items():
cmd += ["-H", "{}: {}".format(k, v)]
if method != "GET":
cmd += ["-H", "Content-Type: application/json",
"--data-binary", body.decode("utf-8", "replace")]
try:
proc = subprocess.run(cmd, capture_output=True, text=True)
except FileNotFoundError:
return 0, "network error: curl not found on PATH"
out = proc.stdout
m = re.search(r"\nHTTP (\d+)\n?\Z", out)
if not m:
return 0, "network error: {}".format(
(proc.stderr or out).strip() or "no HTTP status line from curl")
code = int(m.group(1))
if code == 0: # curl emitted %{http_code}=000 — connection never completed
return 0, "network error: {}".format(
(proc.stderr or "").strip() or "curl reported HTTP 000")
return code, out[:m.start()]
def emit(code, body):
"""Print response body then the trailing `HTTP <code>` line.
Exits non-zero on a transport failure (code 0); HTTP error statuses (4xx/5xx)
are left for the caller to read off the `HTTP <code>` line, matching the
prior scripts' behavior."""
sys.stdout.write(body)
if not body.endswith("\n"):
sys.stdout.write("\n")
print("HTTP {}".format(code))
if code == 0:
sys.exit(1)
def read_payload(arg):
if arg in (None, "-"):
data = sys.stdin.buffer.read()
elif os.path.isfile(arg):
with open(arg, "rb") as f:
data = f.read()
else:
die("payload file not found: {}".format(arg), 2)
if not data.strip():
die("error: payload is empty (no file content, or stdin closed without data)", 2)
return data
# ── subcommands ───────────────────────────────────────────────────────────────
def cmd_state(args):
code, body = request("GET", WF_PATH)
if code != 200:
print("error: list failed (HTTP {})".format(code), file=sys.stderr)
print(body[:400], file=sys.stderr)
sys.exit(4)
items = json.loads(body).get("items") or []
revs = [w for w in items if w.get("name") == args.name]
draft = next((w for w in revs if w.get("revisionStatus") == "draft"), None)
published = next((w for w in revs if w.get("revisionStatus") == "published"), None)
line = lambda w: "none" if not w else "rev {} id={}".format(w.get("revision"), w.get("id"))
print("workflow name: ", args.name)
print("draft: ", line(draft))
print("published: ", line(published))
if draft:
print("WRITE MODE -> update-in-place: POST with id={} (overwrites the existing "
"draft; CONFIRM with the user first). A no-id POST will 409.".format(draft.get("id")))
elif published:
print("WRITE MODE -> new draft: POST without id, OR fork from published id={} "
"via POST /{{id}}/draft.".format(published.get("id")))
else:
print("WRITE MODE -> new draft: POST without id (no existing revisions).")
def cmd_get(args):
code, body = request("GET", "{}/{}".format(WF_PATH, args.id))
emit(code, body)
def cmd_fork(args):
# POST /{id}/draft forks a new draft from a published/archived revision.
code, body = request("POST", "{}/{}/draft".format(WF_PATH, args.id))
emit(code, body)
def cmd_traffic(args):
code, body = request("GET", "{}/{}/traffic".format(WF_PATH, args.id))
emit(code, body)
def cmd_validate(args):
payload = read_payload(args.file)
try:
d = json.loads(payload)
except ValueError as e:
die("error: payload is not valid JSON: {}".format(e), 2)
# /-/validate accepts only {name, nodes, edges}.
body = json.dumps({k: d[k] for k in ("name", "nodes", "edges") if k in d})
code, resp = request("POST", WF_PATH + "/-/validate", body)
emit(code, resp)
def cmd_post(args):
payload = read_payload(args.file)
code, resp = request("POST", WF_PATH, payload)
emit(code, resp)
def assess_exposure(name, threshold):
"""Return (need_latch:bool, message:str) for a non-`test` workflow `name`.
need_latch is True when current live exposure is over threshold OR can't be
read (fail-safe); False when no published revision exists or traffic<=threshold."""
code, body = request("GET", WF_PATH)
if code != 200:
return True, "could not list workflows to find the live revision (HTTP {}) — exposure unknown".format(code)
try:
items = json.loads(body).get("items") or []
except ValueError:
return True, "workflow list was not valid JSON — exposure unknown"
pub = next((w for w in items
if w.get("name") == name and w.get("revisionStatus") == "published"), None)
if not pub:
return False, "no published revision of '{}' exists yet (zero live exposure)".format(name)
pub_id = pub.get("id")
code, body = request("GET", "{}/{}/traffic".format(WF_PATH, pub_id))
if code != 200:
return True, "could not read live traffic for the published revision {} (HTTP {}) — exposure unknown".format(pub_id, code)
try:
cnt = json.loads(body).get("applicantCount")
except ValueError:
cnt = None
if not isinstance(cnt, int):
return True, "traffic response for {} had no integer applicantCount — exposure unknown".format(pub_id)
rel = ">" if cnt > threshold else "<="
msg = "the live revision (id {}) has {} recent applicants on its levels ({} {})".format(
pub_id, cnt, rel, threshold)
return cnt > threshold, msg
def cmd_publish(args):
threshold = int(os.environ.get("SUMSUB_PUBLISH_TRAFFIC_THRESHOLD", "400"))
# 1) Independently read the target to learn its NAME (do not trust the caller).
code, body = request("GET", "{}/{}".format(WF_PATH, args.id))
if code != 200:
print("error: could not read workflow {} (HTTP {}); cannot determine safety. "
"Aborting.".format(args.id, code), file=sys.stderr)
print(body[:400], file=sys.stderr)
sys.exit(4)
info = json.loads(body)
name, rev = info.get("name", ""), info.get("revision", "?")
# 2) Exposure gate — everything except `test`.
if name != "test":
need_latch, gate_msg = assess_exposure(name, threshold)
latched = os.environ.get("SUMSUB_ALLOW_WORKFLOW_PUBLISH") == "1"
if need_latch and not latched:
print(
"REFUSING to set revisionStatus={} on workflow '{}' (revision {}, id {}).\n\n"
"⚠️ This is a LIVE, traffic-intercepting workflow with meaningful current\n"
" exposure:\n {}.\n"
" Workflow revisions are shared across live and sandbox — only applicants\n"
" are isolated — so changing its status with a sandbox token still affects\n"
" REAL production traffic.\n\n"
"If you understand the consequences and intend to proceed, re-run with:\n"
" SUMSUB_ALLOW_WORKFLOW_PUBLISH=1 {} publish {} {}\n\n"
"(Threshold is {} recent applicants; override with SUMSUB_PUBLISH_TRAFFIC_THRESHOLD.\n"
"The 'test' workflow is exempt — but it is not publishable at all: the API\n"
"rejects any revisionStatus change on it.)".format(
args.status, name or "<unknown>", rev, args.id, gate_msg,
sys.argv[0], args.id, args.status, threshold),
file=sys.stderr)
sys.exit(5)
tail = "latch present — proceeding." if need_latch else "at/below threshold — proceeding unattended."
print("exposure gate: {}; {}".format(gate_msg, tail), file=sys.stderr)
# 3) Apply the status change.
code, body = request("PUT", "{}/{}/revisionStatus".format(WF_PATH, args.id),
json.dumps({"revisionStatus": args.status}))
emit(code, body)
def main():
import argparse
p = argparse.ArgumentParser(prog="workflow_api.py", description="Signed Sumsub ApplicantWorkflow API client.")
sub = p.add_subparsers(dest="cmd", required=True)
s = sub.add_parser("state", help="show current revisions + write mode for a workflow name")
s.add_argument("name", choices=["default", "actions", "test"])
s.set_defaults(fn=cmd_state)
s = sub.add_parser("get", help="read one revision's full definition by id")
s.add_argument("id")
s.set_defaults(fn=cmd_get)
s = sub.add_parser("fork", help="fork a new draft from a published/archived revision")
s.add_argument("id")
s.set_defaults(fn=cmd_fork)
s = sub.add_parser("traffic", help="recent applicants on a revision's levels")
s.add_argument("id")
s.set_defaults(fn=cmd_traffic)
s = sub.add_parser("validate", help="dry-run validate a built payload (stores nothing)")
s.add_argument("file", nargs="?", default="-", help="payload file, or '-'/omitted for stdin")
s.set_defaults(fn=cmd_validate)
s = sub.add_parser("post", help="create/update a draft from a built payload")
s.add_argument("file", nargs="?", default="-", help="payload file, or '-'/omitted for stdin")
s.set_defaults(fn=cmd_post)
s = sub.add_parser("publish", help="change a revision's status (GATED — see module docstring)")
s.add_argument("id")
s.add_argument("status", nargs="?", default="published", choices=["published", "archived", "draft"])
s.set_defaults(fn=cmd_publish)
args = p.parse_args()
global ENV
ENV = env()
args.fn(args)
if __name__ == "__main__":
main()
SKILL.md
---
name: sumsub-create-workflow
description: Create a Sumsub applicant workflow — verification routing (levels, branches, country/age rules, final-rejection or manual-review steps) or an action workflow (post-verification tagging, notes, source-key changes). TRIGGER on requests to create/build/add a workflow or a flowchart-style routing description. Builds, validates, and saves a draft, then publishes it — gated by live traffic — automatically when the workflow's traffic is low, only after explicit confirmation when it's high. Publishing changes LIVE traffic — see the Danger section. SKIP for editing arbitrary fields of an existing revision, or for questionnaires/levels (separate skills).
allowed-tools: Read, Write, Bash
---
# Sumsub — Create Workflow
Builds an `ApplicantWorkflow` JSON payload from a compact node/edge spec, validates it (dry-run), POSTs it as a `draft`, and then — gated by the workflow's **current live exposure** — publishes it via `PUT /{id}/revisionStatus`: directly when exposure is low, or only after explicit confirmation when it's high. Reports the resulting `name` (kind) / `revision` / `revisionStatus` / `id`. **Read the Danger section before publishing anything.**
## Concepts
A *workflow* routes applicants through levels and branches. There is exactly **one** workflow
per **kind**: `default` (auto-runs for every verification), `actions` (auto-runs for applicant
actions), `test` (isolated; runs only from its draft, launched manually per applicant — **not
publishable**). Each save creates a new **revision** of that singleton, never a new workflow.
A revision is a **draft** — editable, routes no traffic, always safe to create / update /
validate — until it is **published**, which makes it live for **all real production traffic**
and auto-archives the previously published revision. `test` never publishes; it runs from its
draft.
## Endpoints
| Method | Path | When |
|---|---|---|
| `POST` | `/resources/api/agent/applicantWorkflows` | Create (no `id`) or update a **draft** by `id`. Only drafts are editable; a `published`/`archived` `revisionStatus` here is rejected. **Always safe** — drafts route no traffic. |
| `POST` | `/resources/api/agent/applicantWorkflows/-/validate` | Dry-run validation. Returns `notices[]` without persisting. Read-only. |
| `GET` | `/resources/api/agent/applicantWorkflows` | List workflows (every revision, all statuses). Response is flat: `{ "items": [...], "totalItems": N, "pageInfo": { "limit", "offset" }, "error": {...}? }` — `items` is top-level (no `list` wrapper). |
| `GET` | `/resources/api/agent/applicantWorkflows/{id}` | Read one revision (the `id` is a specific revision, not the workflow name). |
| `GET` | `/resources/api/agent/applicantWorkflows/{id}/traffic` | Applicants recently on this revision's levels: `{"applicantCount": N}`. Read-only; the input to the publish exposure gate. **Level-derived, not workflow-routed — see Danger.** |
| `POST` | `/resources/api/agent/applicantWorkflows/{id}/draft` | Fork a new draft from a published/archived revision — the way to iterate on a live workflow without touching it. |
| `PUT` | `/resources/api/agent/applicantWorkflows/{id}/revisionStatus` | **Publish / archive** a revision. Body `{"revisionStatus":"published"|"archived"|"draft"}`. Publishing requires zero `error` notices and **auto-archives the prior published revision**. ⚠️ **Affects live traffic — see Danger.** |
Permission required on the App Token: `manageWorkflows`. Sandbox tokens typically have it; if you hit `403 Unauthorized (atd)`, regenerate the token with the right scopes.
## ⚠️ Danger — publishing affects LIVE production traffic
**Workflow revisions are shared across live and sandbox; only *applicants* are
isolated.** Publishing changes the workflow that handles **all real production
traffic** — a sandbox `sbx:` token does **not** make this safe. This is the single
most important fact about this skill. (Drafts, by contrast, route no traffic —
create / update / validate them freely.)
Publishing `default`/`actions` is gated by the workflow's **current live exposure**
— the recent applicant traffic on the revision that is currently `published` (the
one a publish auto-archives), measured by the `workflow_api.py traffic` subcommand. The
threshold is **400** recent applicants (override: `SUMSUB_PUBLISH_TRAFFIC_THRESHOLD`):
| Workflow `name` | Current live exposure | Publishing |
|---|---|---|
| `default` / `actions` | **> 400** recent applicants, **or** unreadable | **Fully guarded**: clean validate · diff vs current published · explicit user "yes" · `SUMSUB_ALLOW_WORKFLOW_PUBLISH=1` latch |
| `default` / `actions` | **≤ 400**, **or** no published revision yet | **Low-exposure: publish directly** — no confirmation, no latch (still report what you did) |
| `test` | — | **Not publishable** — `revisionStatus` is immutable (the API rejects the call); it runs from its draft |
The exposure count is **level-derived** — it counts applicants recently seen on the level
*names* the published revision contains (so revisions sharing level names report overlapping
counts), reflecting how busy this workflow's levels are *now*, not the new revision's blast
radius. Phrase it to the user as *"the levels in this revision have N recent applicants,"*
never *"this workflow handled N."* Rules that hold regardless of exposure:
- **Publishing is the default end of a build, not a separate request** — the gate
above decides what it costs (low → direct; high → confirm + latch). The only thing
that keeps a build at a draft is the user explicitly opting out (*"just save a draft"*).
- **Fail safe on unknown exposure.** If the live revision's traffic can't be read
(API error), treat it as over-threshold and run the full guarded flow.
- **Never switch kinds to dodge the gate.** A publish request can't be made "safer"
by retargeting to `test` (the API rejects it anyway). Publish the requested kind.
- `workflow_api.py publish` is the backstop: it independently re-measures exposure and
requires `SUMSUB_ALLOW_WORKFLOW_PUBLISH=1` **only** when exposure is over-threshold
or unreadable — letting a low-exposure publish through unlatched.
## Auth — App Token + secret (sandbox only)
Each request is signed with App Token + secret (HMAC-SHA256). Full signing details
and `401` debugging: [`sumsub-api-auth`](../sumsub-api-auth/SKILL.md).
> **⚠️ Sandbox only.** A workflow routes real applicants, so production tokens are
> refused — the scripts reject anything not prefixed `sbx:`. Mint a sandbox pair in
> the dashboard (switch the workspace to **Sandbox** → App tokens → Create; both are
> shown once).
| Var | Example |
|---|---|
| `SUMSUB_APP_TOKEN` | `sbx:...` — sandbox App Token from the dashboard. |
| `SUMSUB_SECRET_KEY` | The paired secret shown once at token creation. |
| `SUMSUB_BASE` | Optional. Defaults to `https://api.sumsub.com`. |
If the user has already supplied credentials in conversation, reuse them;
otherwise ask once before running. Never echo the secret back.
> **Not a credential:** publishing a **high-exposure** `default`/`actions` revision
> (live traffic above the threshold, or unreadable) is armed by
> `SUMSUB_ALLOW_WORKFLOW_PUBLISH=1`, but that is **not** a configured env var —
> it is a per-command arming token you type inline on the publish call (step 8),
> nothing else. **Never** add it to `settings.local.json` or any persistent env:
> doing so leaves the gate permanently open, which defeats its only purpose. It
> belongs on exactly one command line, at the moment you publish, and nowhere else.
## Principles
These three govern every step below; the procedure points back here where each one bites. They share one spine — **the user's intent and the workspace's real entities are the ground truth; your job is to wire them faithfully, never to invent or improve.**
1. **Build exactly what the user specified.** Their level names, node structure, branch logic, and chosen `kind` are fixed constraints — not raw material to improve. If your own reasoning concludes a choice is redundant or suboptimal — often resting on a wrong assumption about how levels or the engine behave (e.g. chained levels *don't* re-capture already-collected data — see [references/workflow-patterns.md](references/workflow-patterns.md)) — **build it literally and flag the concern in your report**, never silently substitute a design you prefer. Validation catches what's *invalid*; "suboptimal" is not "invalid," and is never license to change their design.
2. **Wire entities; don't own them.** Every level, client list, and tag a node references must resolve to something real before you build on it — a name the user gave you, one you confirmed via `GET /resources/applicants/-/levels`, or one explicitly being created (by you, a companion skill, or the user). An ungrounded reference is a **stop, not a blank to fill**: reuse what exists, get it created, or mark it explicitly pending — **never invent a plausible name to make the graph look complete** (that a missing reference blocks only *publish*, not the draft, is no license to fabricate one). Ground *proactively* — read the existing levels and reuse a real one before asking or inventing.
3. **Aim at the reference, not the green checkmark.** Structural/builder errors are yours to fix — iterate until clean. But a missing-entity error (`levelNotFound`, `tagDoesNotExist`, unknown client list) is cleared only by **grounding** the reference — never by repointing it at a convenient entity to make validation pass. And **report the territory, not the map you wish were true**: a draft with unresolved references is **unfinished**, and structure you bent to fit an existing entity is a **change to the user's policy** — surface both plainly, never as a clean success.
## Procedure
0. **Resolve the workflow `kind` from the user's own words, and state it back.** If the user named no kind, it is **`default`** (the spec default). Use `test` or `actions` **only when the user explicitly names them.** Never infer, default to, or substitute a kind the user didn't ask for. **State the kind as an assumption and proceed** — say e.g. *"treating this as `default` since you didn't specify a kind"* so it's visible and correctable; don't turn the kind into a multiple-choice question. **Never offer `test` as a "safe place to build" a `default` workflow** to avoid touching an existing draft: `test` is for manual, per-applicant test runs, has its own separate draft, **cannot be published**, and has **no promotion path** into `default`. An existing `default` draft is never a reason to build elsewhere — just overwrite it (step 3).
1. **Translate the user's flowchart into the compact spec** (below). One node per box / decision diamond, one edge per arrow. Use `id`s that read like labels (`country-check`, `route`, `idv`, `reject-region`). If the user gives a *policy* rather than a flowchart ("build me a KYC/KYB workflow"), don't start from a blank page — decompose it with the canonical pipeline spine and primitives in [references/workflow-patterns.md](references/workflow-patterns.md), then stamp that spine per segment. Build only what the user specified, and ground every level / list / tag reference before building on it (**Principles 1–2**).
2. **Validate the graph:** every edge `from`/`to` resolves to a node id; every `applicantLevel` / `actionApplicantLevel` references a real level by name; every `exclusiveChoice` has ≥1 branching out-edge (`condition:` or `on:`); final-rejection nodes carry `labels` or `buttonIds`. (A level — and every non-choice node — has a **single, unconditional** out-edge; only an `exclusiveChoice` may branch — see Edge `on:`.) The graph is a directed **acyclic forest**: edges point only forward (no cycles/back-edges — document resubmission is **not** a back-edge; the engine retries in place), while fan-in and shared downstream nodes are fine and several entry levels may root independent flows. **Never bridge different applicant types** (KYC individual vs KYB company) with an edge — an applicant's type can't change. Full graph rules: *Constraints* in [references/workflow-schema.md](references/workflow-schema.md); resubmission in [references/workflow-patterns.md](references/workflow-patterns.md).
3. **Check current state** with `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py state <name>` for the target workflow `name`, then pick the write mode: **no revisions** → create (POST without `id`); **a draft already exists** → update it **in place** (POST with that `id`; a no-`id` POST would `409`); **a published revision but no draft** → seed a draft with `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py fork <id>`, or just POST a fresh one. **Overwriting an existing draft is the normal, expected operation — do it silently.** The draft is a scratch surface the skill evolves across multiple runs, so don't ask before overwriting and don't back it up by default. **Only** if the user explicitly asks to preserve their current draft, first read it with `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py get <id>` and save the JSON body to a file (the command appends a trailing `HTTP <code>` line — keep only the JSON), then overwrite. When editing, **preserve existing node and edge ids** — `get <id>` the revision you're basing on and carry its ids through, minting new ids only for new nodes/edges (the engine matches in-flight runs on those ids; rationale in *Revision continuity*, [references/workflow-schema.md](references/workflow-schema.md)).
4. **Generate payload** with `${CLAUDE_SKILL_DIR}/scripts/build_workflow.py` — spec on stdin → full payload on stdout. The builder assembles the payload from the real node types and edge `condition` ASTs, and validates node types, operators, and action `targetType` against its built-in known sets — so typos and unsupported constructs error here, before any network call (the API's validate is authoritative for the rest — levels, client lists, labels). Set the draft's `id` in the spec when updating in place (step 3).
5. **Validate (dry-run, stores nothing).** Pipe the payload to `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py validate` → `notices[]`. `info` = advisory; `warning` = non-blocking but usually a real bug; `error` = publish-blocker. Look up any notice's meaning, severity, params, and how to act in [references/workflow-notices.md](references/workflow-notices.md). Clear a missing-entity error by **grounding** the reference, not by repointing it to pass validation (**Principle 3**). Always validate before persisting.
6. **POST** via `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py post` — create (no `id`) or update in place (with the `id` from step 3). Response carries the persisted draft with `id`, `clientId`, `notices[]`.
7. **Build the dashboard link** from `clientId` in the response body:
```
https://cockpit.sumsub.com/checkus/sdkIntegrations/workflows/active/applicant?clientId=<clientId>&sbx=true
```
`sbx=true` targets the Sandbox workspace. ⚠️ Not a per-`id` deep link — it shows the current draft; tell the user to click promptly.
8. **Publish — the default end of a build, gated by exposure.** Skip only if the user opted out (*"just save a draft"*) — a draft routes no traffic, so it's not a useful end state on its own. The draft must have last validated clean (step 5) — the API refuses to publish a revision with any `error` notice. Run `${CLAUDE_SKILL_DIR}/scripts/workflow_api.py publish <draft-id>`; it owns the **live-exposure gate** (defined in Danger) and does one of two things:
- **Low exposure** → it **publishes directly**; you're done.
- **High exposure** → it **refuses before changing anything**, printing the exposure count and the currently-published revision's `id` (your one-command rollback point). To proceed, run the guarded flow: diff the draft against that published revision, disclose the change **and that count** to the user (*"makes revision N live for ALL real production traffic; the current published revision — whose levels have ~M recent applicants — will be auto-archived"*), get an **explicit "yes"**, then re-run prefixed with `SUMSUB_ALLOW_WORKFLOW_PUBLISH=1`.
**Rollback:** re-publish the previously-published `id` — `SUMSUB_ALLOW_WORKFLOW_PUBLISH=1 ${CLAUDE_SKILL_DIR}/scripts/workflow_api.py publish <previous-published-id>` (keep the latch — once it's live again, the revision you're replacing may itself be over-threshold). `test` is never published — see Danger.
9. **Report** (lead with the human-readable identity) — and report the territory, not the map you wish were true: flag any unresolved reference or bent structure plainly, never as a clean success (**Principle 3**). Lead with the workflow `name` (`default`/`actions`/`test`) and `revision` — e.g. «default» revision 14 — then `revisionStatus`; node/edge counts and the sorted unique level names referenced (so misspellings show); the **dashboard link** (step 7) as a clickable markdown link. If you published, say so, name the now-`published` revision, note the auto-archived previous revision, and give its id as the rollback point. End with a single `Workflow ID: <id>` line — the one place a raw id belongs. On failure, surface Sumsub's `description` / `errorName` verbatim (builder validation errors already print a precise message).
## Compact spec format (JSON or YAML on stdin)
> **`kind` selects which workflow you're editing** (see *Concepts* for what each kind
> means and how revisions/drafts work). It is set **only** by the user's explicit
> request (see step 0); the default is `default`. ⚠️ `default`/`actions` intercept real
> traffic once published — see the Danger section. (The schema has a `title` field, but
> the engine ignores it — the skill neither sets nor relies on it.)
Nodes use the **real schema node-type** in `type`; edges carry the **real Sumsub
`condition` AST** directly (no expression mini-language). `on:` is a shorthand for
`reviewDecisions`.
```yaml
kind: default # optional — default | test | actions (the workflow to edit)
revisionStatus: draft # optional; only `draft` on create. Publishing is a separate, gated step (see Danger).
nodes:
- id: country-check
type: applicantLevel
levelName: "Country Selector"
- id: route
type: exclusiveChoice
name: "Country router"
- id: idv
type: applicantLevel
levelName: "IDV"
- id: idv-result
type: exclusiveChoice
name: "IDV result"
- id: reject-region
type: finalRejection
labels: ["WRONG_USER_REGION"]
- id: manual
type: manualReview
edges:
# A level's out-edge is single & unconditional — branch only at an explicit exclusiveChoice.
- { from: country-check, to: route } # plain: level → choice
- from: route # embargo first (any decision)
to: reject-region
condition: { or: [ { and: [ { op: in, args: [ {exp: "applicant.country"}, {lit: "[\"UZB\", \"DEU\"]"} ] } ] } ] }
- from: route # approved & allowed → IDV
to: idv
on: approved
condition: { or: [ { and: [ { op: eq, args: [ {exp: "applicant.country"}, {lit: "\"USA\""} ] } ] } ] }
- { from: idv, to: idv-result } # plain: level → choice
- { from: idv-result, to: manual, on: rejected } # resubmission unhandled → engine retries (the default)
```
### Node types
A node is `{ id, type, name?, <body> }`, where `type` is the **real schema node
type**. Body fields may be flattened (shown below) or written in the real nested
form (`applicantLevel: { levelName }`).
**Standard verification workflow** (`kind: default|test`):
| `type` | Body |
|---|---|
| `applicantLevel` | `levelName` (string); optional `disableGoBack` |
| `exclusiveChoice` | — (branches via outgoing edges) |
| `actions` | `actions:` list (see below) |
| `manualReview` | — |
| `finalRejection` | `labels` OR `buttonIds` |
**Action workflow** (`kind: actions` only): each `action*` type mirrors its standard counterpart — `actionApplicantLevel`, `actionExclusiveChoice`, `actionActions`, `actionManualReview`, `actionFinalRejection` take the same body as the names without the `action` prefix. Plus one extra: `actionApplicantTransition` (`levelName` — the `default`-workflow level to hand the verification back into; it must exist in the **published `default` workflow**, or validate raises `missingLevelsForTransition`).
`action*` types are valid **only** inside an action workflow (a graph that runs after a primary verification — typically tagging / noting / changing source key, or transitioning the applicant back into `default`); standard types only in `default`/`test`. Mixing them is rejected; the builder catches it before POST.
### Actions block
Inside an `actions` or `actionActions` node:
```yaml
- id: tag-and-note
type: actions
actions:
- tag: ["High risk", "Manual review"] # adds tags
- note: "Flagged by workflow" # adds applicant note
- sourceKey: "manual-flow" # overrides applicant source key
```
Each item must contain exactly one of: `tag`, `note`, `sourceKey`. Tag/note also take a
richer object form for the niche cases:
```yaml
- tag: { add: ["VIP"], remove: ["pending"], target: applicantAction }
- note: { text: "Auto-note", target: applicantAction }
```
- `target` (`targetType`) is `applicant` by default. `applicantAction` targets the
triggering action and is **only valid in an action workflow** (`kind: actions`).
- Not supported: `kytCase` (postponed — no public API for its `blueprintId` yet),
`riskScore`, `recheck`. (The old `riskLevel` action never existed — removed.)
### Edge conditions (`condition:`)
An edge may carry a `condition:` — the **real Sumsub condition AST, written directly** (there is no expression mini-language):
```yaml
condition:
or: # OR of AND-groups; branches evaluated in order, first match wins
- and:
- { op: eq, args: [ {exp: "applicant.country"}, {lit: "\"USA\""} ] }
- { op: in, args: [ {exp: "poi.country"}, {exp: "clientLists.high_risk"} ] }
```
- **`{exp: "<path>"}`** — an expression path, verbatim. Anything the engine accepts works, including bracket/quoted segments: `applicant.metadata["balance"]`, `clientLists["luhansk_people's_republic"]`. It's the left side of a comparison, and also the **right** side for field-to-field and **client-list** checks (`{exp: "clientLists.high_risk"}`).
- **`{lit: "<json>"}`** — a literal, supplied **already JSON-encoded as a string** (the form the API stores): `"\"USA\""`, `"3"`, `"true"`, `"[\"UZB\", \"DEU\"]"`. An un-encoded literal (`{lit: "USA"}`) is rejected by the API with `syntaxError`, so the encoding is required.
- **`op`** is one of the comparison operators (`eq ne lt lte gt gte in notIn contains notContains containsAny containsAll startsWith endsWith match empty notEmpty eqIgnoreCase …`; full set in [references/workflow-schema.md](references/workflow-schema.md)). The builder validates every `op` against its known set and rejects unknown or reserved ones (`call`).
- **Negation** is expressed with the `not*` operators (`notIn`, `notContains`, `ne`, `notEmpty`, …) — do **not** set a `negate` flag; a top-level `Condition.negate` is rejected (UI-unsupported).
> **Client lists** (`clientLists.<name>`) are **tenant-defined named lists** maintained in the Sumsub dashboard, used as an expression RHS with `in` / `notIn` / `containsAny`. This skill does **not** create them. An unknown list validates as an `invalidExpression` error notice (a missing-entity error, like `levelNotFound`) — the construct is valid, the list just isn't defined in that workspace.
The full `Condition`/`And`/`Criterion` AST, literal-encoding rules, and operator list live in [references/workflow-schema.md](references/workflow-schema.md); valid `exp` paths are in [references/workflow-expressions.md](references/workflow-expressions.md).
### Edge `on:` (review-decision routing)
`on: approved` gates a transition on a level's **review decision** (`approved` / `rejected` / `resubmission`; pass an array for several) — a shorthand for the real `reviewDecisions:` field. **`on:`/`condition:` are honored only on edges leaving an `exclusiveChoice`** (or `actionExclusiveChoice` in an action workflow; the `reviewDecisions` match the upstream level's decision); a level's own out-edge is a **single, unconditional** transition. So to branch on a level's outcome you author the choice yourself: point the level at an `exclusiveChoice` with one plain edge, then put the `on:`/`condition:` branches on the **choice's** out-edges (evaluated in declared order, first match wins). The builder does **not** synthesize choices — it **rejects** `on:`/`condition:` on a level edge (and a level with >1 out-edge), with a message telling you to insert the choice. `on:` and `condition:` can coexist on a choice's out-edge.
Two primitives govern omitted decisions: **(1)** omitting `on:` makes an edge **decision-agnostic** — it doesn't check the decision; **(2)** a resubmitter **stays on its level** unless some branch on the immediate post-level choice names `resubmission`. Together, a no-`on:` edge in practice serves **approved + rejected** while resubmission retries by default (it's a deduction from these two, not a stored default set). **Leave resubmission to the engine: don't name `resubmission` anywhere unless the user explicitly asks to cap or otherwise act on repeated attempts.** It is not part of a standard workflow — the engine's automatic retry is what almost everyone wants. Only if asked, see *Iteration without cycles: the resubmission gate* in [references/workflow-patterns.md](references/workflow-patterns.md) (and note: naming `resubmission` on a choice changes how its **other** edges behave — that section explains the interlock).
## Worked examples
- [`examples/country-routing.json`](examples/country-routing.json) — entry level → eligibility gate (region-reject vs IDV) → IDV → a second choice → manual-review on a rejected IDV. Two choices, because a level sits between them (the most common topology).
- [`examples/action-workflow.json`](examples/action-workflow.json) — small action-workflow that tags and notes after a level completes.
- [`examples/aml-routing.json`](examples/aml-routing.json) — client-list geo gate + post-AML routing on `applicant.review.rejectLabels` (PEP / SANCTIONS / ADVERSE_MEDIA) with `containsAny` and tag-driven fan-in (mirrors real-world AML topologies).
## See also
- [references/workflow-schema.md](references/workflow-schema.md) — reference for every node type's body, the action model, the `Condition` AST + operators, the lifecycle, and the live-traffic guard.
- [references/workflow-expressions.md](references/workflow-expressions.md) — the expression-path lookup dictionary.
- [references/workflow-notices.md](references/workflow-notices.md) — the validation-notice catalog: every `notices[]` key the `validate`/`post` endpoints return, with severity, params, and how to act (ground a reference vs. fix the spec). Look up any notice you get here.
- [references/workflow-patterns.md](references/workflow-patterns.md) — composition patterns: how to decompose a KYC/KYB policy into the canonical pipeline spine and reusable primitives (strategy, not schema). Start here when the ask is "build me a workflow" rather than "fix this node".