Encounter
A unified, consistent representation of a traveler encounter across all border control channels — enabling reliable tracking of traveler movements, interactions, and system touchpoints over time.
All channel-generated interactions (Enrollment, Smart Corridor, eGates, Kiosks, external systems) are recorded using shared semantics and correlated to travelers whenever possible.
Principles
- Encounters are sessions, not atomic events. An Encounter represents an operational interaction with a defined purpose. The atomic steps inside it are
EncounterEventrecords. - Events provide internal traceability; Encounters provide operational meaning. History is read at the Encounter level; the Event level explains how the Encounter unfolded.
- Identity is known at the time of the Encounter. Every Encounter is linked to a Traveler at creation. Identity is established by the channel beforehand — by enrollment for first-time travelers, by identification at the border post for subsequent interactions, or by other channel-level identity provisioning.
- TIS stores facts, not decisions. Encounters describe what happened, where, and in which context — they do not embed application-level decision logic. Downstream systems react.
- All channels speak the same Encounter language. eGate, Corridor, Kiosk, Border Post, and external systems all produce Encounter records with the same shape and the same enums.
Relationship to Traveler, Document, and Journey
| Relation | Cardinality | Notes |
|---|---|---|
| Traveler → Journey | 1:N | Journey does not link directly to Encounter |
| Traveler → Document | 1:N | A Document is registered to a Traveler |
| Traveler → Encounter | 1:N | Encounter does not link directly to Journey |
| Encounter → Document | 0:1 | An Encounter references the primary Document used during the interaction via documentId; present whenever a document is used, absent for document-less interactions |
| Encounter → EncounterEvent | 1:N | Atomic steps belonging to the Encounter |
Journeys and Encounters are independent dimensions of the Traveler — one is the planned movement context, the other is the recorded interaction history. Correlation between them is derived (timestamp, location), not modeled by a direct foreign key.
Attributes
| Field | Type | Optionality | Format / Length | Source | Notes |
|---|---|---|---|---|---|
id | UUID / string | Mandatory | 36 chars | System | Internal identifier |
purpose | enum | Mandatory | see below | Canonical | Business reason for the interaction |
channel | enum | Mandatory | see below | Canonical | Interaction channel |
sourceSystem | string | Mandatory | 1..50 | System | Origin system; together with externalReference forms the uniqueness constraint |
externalReference | string | Mandatory | 1..100 | External | Source system's business reference for the interaction; with sourceSystem forms the uniqueness constraint |
startedAt | datetime | Mandatory | ISO 8601 UTC | System | Timestamp when the Encounter started |
endedAt | datetime | Optional (Mandatory when outcome != PENDING) | ISO 8601 UTC | System | Timestamp when the Encounter ended with a definitive outcome |
location | string | Optional | 1..100 | Deployment | Site / zone / lane |
outcome | enum | Mandatory | PENDING, ALLOWED, DENIED, SUSPENDED | System | Lifecycle state |
travelerId | UUID / string | Mandatory | 36 chars | System | Linked Traveler — always populated; identity is known when the Encounter is created |
documentId | UUID / string | Conditional | 36 chars | System | Mandatory when a document is presented / used; optional for document-less interactions. Primary travel document (passport > national ID; visa complementary) |
events | array<EncounterEvent> | Optional | 0..N | Canonical | Nested events — see below |
Enum: purpose
BORDER_CHECK_ENTRY, BORDER_CHECK_EXIT, ENROLLMENT, TRAVEL_AUTH, PRE_TRAVEL_AUTH, FIELD_CHECK, SECONDARY_INSPECTION
Enum: channel
EGATE, KIOSK, APPLICATION, BORDER_POST, CORRIDOR, EXTERNAL_SYSTEM
EncounterEvent
A single step within an Encounter. Each event is a universal envelope — eventType, capturedModality, timestamp, result, comment, metadata — plus a typed payload selected by eventType: a capture object for a CAPTURE, or an assessment object for an ASSESSMENT. This breaks the interaction into auditable, fine-grained steps while keeping a single, consistent shape across channels.
Attributes
| Field | Type | Optionality | Format | Source | Notes |
|---|---|---|---|---|---|
id | UUID / string | Mandatory | 36 chars | System | Event identifier |
encounterId | UUID / string | Mandatory | 36 chars | System | Parent Encounter |
eventType | enum | Mandatory | CAPTURE, ASSESSMENT | Canonical | Step category — selects the typed payload |
capturedModality | enum | Mandatory | see below | Canonical | Which modality was captured (subject of the step) |
timestamp | datetime | Mandatory | ISO 8601 UTC | System | Event time; sole ordering key |
result | enum | Mandatory | SUCCEEDED, FAILED, SKIPPED | Canonical | Execution result of the step |
comment | string | Optional | 1..500 | System | Free-text context for result; most useful when FAILED / SKIPPED |
capture | object | Conditional | { artifactRef } | Canonical | Present when eventType = CAPTURE |
capture.artifactRef | string | Conditional | URI / ID | System | Reference to the raw captured artifact; required for CAPTURE when result = SUCCEEDED. The Encounter references, never stores, the artifact |
assessment | object | Conditional | { assessmentType, score, threshold, passed, algorithmVersion } | Canonical | Present when eventType = ASSESSMENT |
assessment.assessmentType | enum | Conditional | see below | Canonical | Required when eventType = ASSESSMENT |
assessment.score | number | Conditional | 0..1, 4 decimals | Canonical | For ASSESSMENT when result ∈ {SUCCEEDED, FAILED} |
assessment.threshold | number | Conditional | 0..1, 4 decimals | Canonical | Policy threshold applied; same rule as score |
assessment.passed | boolean | Conditional | — | Canonical | Derived (score ≥ threshold), materialised; same rule as score |
assessment.algorithmVersion | string | Conditional | 1..50 | System | Engine / model version; for ASSESSMENT |
metadata | object | Optional | typed by (capturedModality, assessmentType) | Canonical | Step-specific payload (sub-scores, candidates, parsed data, device info) |
Enum: eventType
CAPTURE, ASSESSMENT
Enum: capturedModality
DOCUMENT, FACE, IRIS, PALM, FINGERPRINT_SLAP, FINGERPRINT_CONTACTLESS
Enum: result
SUCCEEDED, FAILED, SKIPPED
Enum: assessment.assessmentType
QUALITY, LIVENESS, AUTHENTICITY, VERIFICATION, IDENTIFICATION, VALIDITY
Sample event flow
A typical sequence within a single Encounter — capture, then one or more assessments per modality. Shown flat for readability: assessmentType / score / threshold / passed belong to the typed assessment object, and artifactRef belongs to the typed capture object.
| timestamp | capturedModality | eventType | assessmentType | result | score | threshold | passed | comment | metadata (snippet) |
|---|---|---|---|---|---|---|---|---|---|
| 08:42:06 | FACE | CAPTURE | — | SUCCEEDED | — | — | — | — | { deviceId: "egate-mad-t4-03" } |
| 08:42:08 | FACE | ASSESSMENT | QUALITY | SUCCEEDED | 0.23 | 0.60 | false | quality below threshold | { subScores: { sharpness: 0.31, pose: 0.22 } } |
| 08:42:08 | FACE | ASSESSMENT | LIVENESS | SKIPPED | — | — | — | skipped due to quality failure | — |
| 08:43:15 | PALM | CAPTURE | — | SUCCEEDED | — | — | — | — | { deviceId: "egate-mad-t4-03" } |
| 08:43:18 | PALM | ASSESSMENT | QUALITY | SUCCEEDED | 0.88 | 0.60 | true | — | { subScores: { … } } |
| 08:43:22 | PALM | ASSESSMENT | VERIFICATION | SUCCEEDED | 0.97 | 0.85 | true | — | { referenceArtifactId: "doc-photo-uuid", mode: "PROBE_VS_REFERENCE" } |
CAPTURErows also carrycapture.artifactRef(URI/ID of the raw captured artifact), omitted above for width — e.g. the 08:42:06 FACE capture →capture: { artifactRef: "s3://…/face-uuid" }.
See also
- Data Model overview — full entity set, standards alignment, domain separation
- Traveler — the entity Encounters are linked to
- Document — Documents used during an Encounter
- Journey — Journeys and Encounters are independent dimensions of the Traveler