Skip to content

Customer Merge Preferences

Taxi & Private HireProductsCustomer › 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.

Fields

FieldTypeDescription
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.