Customer Merge Preferences
Taxi & Private Hire › Products › Customer › Customer Merge Preferences
Generally available
Per-customer toggle controlling whether their trip segments can be merged with other trips or excluded from multi-load operations. Participates in a hierarchical resolution chain (Customer → Account → Department) so corporate-account policies can override individual settings where required.
Related
Fields
| Field | Type | Description |
|---|---|---|
email | string | Email address. Optional — kept on the protected group rather than public so it doesn't leak into driver-facing payloads. |
phone | string | Primary phone number — normalised to E.164 at write time, unique per tenant. The strongest match key during booking — re-entering an existing phone returns the matched Customer rather than creating a new one. Required. |
firstName | string | First / given name. Optional but used everywhere a human-readable label is shown. |
lastName | string | Last / family name. On the protected group — driver-facing payloads typically only show firstName + last initial. |
priority | smallint | Numeric priority tier (10-80, lower = higher priority). Drives dispatch ordering, time-boost rules, and operator visual cues. Recalculated by the priority sweep from loyalty miles + minPriority floor. |
priorityType | PriorityType · ELITE_PLUS | ELITE | PLATINUM | GOLD | SILVER | REGULAR | REGULAR_2 | REGULAR_3 | Human-readable priority tier (ELITE_PLUS through REGULAR_3). Derived from the numeric `priority` value; kept on the entity for UI rendering without re-deriving on every read. |
rating | smallint | Editable rating score (default 100). Operator-adjusted reputation indicator surfaced on dispatch + booking screens. Independent of the priority tier (which is auto-recalculated). |
minPriority | smallint | Floor for the priority recalculation — the priority sweep never lets `priority` drop below this. Used for VIP customers whose tier should hold during slow months. |
priorityLastCalculated | integer | Unix timestamp of the last priority sweep that touched this customer. Used by the sweep to skip-if-recent. |
excludeFromMultiload | bool | Hard block — when true, the customer's segments are never merged with other trips, regardless of merge-preference resolution. Customer-explicit override. |
mergePreference | MergePreference · INHERIT | NEVER | NONE | ACCOUNT | ACCOUNT_DEPARTMENT | ALL | Per-customer merge preference (INHERIT, NEVER, OWN_ACCOUNT, OWN_DEPARTMENT, ANY). Participates in the Customer → Account → Department resolution chain; the most specific non-INHERIT wins. |
analyticsExcluded | bool | Analytics opt-out. When true, the customer is never written to the customer_snapshot retention warehouse and is filtered out of every retention read + export; any existing snapshot rows are purged on opt-out (GDPR). Distinct from a marketing opt-out — a customer may permit analysis but not outreach. |
brand | Brand | Default brand for this customer — drives the customer-app theming, the email-template branding, and which brand-scoped operators see the customer in their console. |
customerAddresses | Collection | |
primaryGroup | string | |
tags | Collection | |
accountEmployees | Collection | |
paymentMethods | Collection | |
specialCategoryPassengerLinks | Collection | |
specialCategoryPassengers | Collection | |
driverNote | string | Notes shared with the Driver and Operator, to be treated as publicly visible and not to include personal information |
managementNote | string | Internal notes for management use only. |
clientCapabilities | Collection | Default Capabilities used when booking trips for this record |
deletedAt | integer | |
deletedBy | bigint | |
clientId | bigint | Tenant scope. Every tenant-aware entity carries this; `ClientFilter` enforces row-level isolation on read; the multi-tenancy routing layer (`/client/{clientId}`) sets it at create time. Surfaced only under `admin` / `tripLog` groups — never to end users. |
internalKey | string | Optional client-supplied external reference / idempotency key. When present, lets external systems correlate platform-side records back to their own source-of-truth ids. Not persisted to a column — populated by the request handler when the caller sets it. |
__objectType | string | Discriminator string (entity class short-name) emitted alongside the id in serialized output. Resolved at read time by `getObjectType()`; lets the FE dispatch entity-specific rendering without inspecting the URL. |
id | bigint | Snowflake-style primary key (unsigned BIGINT). Generated by `IdFactory` at create time; surfaced to the FE / API as a `G`-prefixed string and stripped back to plain bigint server-side before Doctrine lookup. |
createdDate | integer | Unix timestamp the row was first persisted. Set in the entity's PrePersist hook; never rewritten on subsequent updates. |
updatedDate | integer | Unix timestamp the row was last touched. Bumped on every commit that hits the Doctrine UoW for this entity; drives FE invalidation + the listing change cursor. |
passiveUpdatedDate | int | Read-through alias for `updatedDate` exposed under different serializer groups. Lets the FE distinguish "real edit" from "background touch" projections without changing the underlying column. |
listingUpdatedDate | int | Listing-projection timestamp surfaced only under the `listMode` group. Driven by `TripCache` and other listing-shape refreshers separately from `updatedDate` so a listing rebuild doesn't trigger detail-page invalidation. |