Skip to content

Customer-Vibes Data Model

🏗️ Primary Entities

Customers: Individual or business customers with contact information and preferences

Vehicles: Vehicle records associated with customers

Integrations: External system mappings for both customers and vehicles

Appointments & Services: Historical service data and scheduling information

🔗 Key Relationships

One-to-Many: Customer → Vehicles

One-to-One: Customer → Integration (when steer_entity = 'Customer')

One-to-One: Vehicle → Integration (when steer_entity = 'Vehicle')

Core identification fields for customer records with internal and external system mapping.

Field NameData TypeDescriptionRequired
steer_customer_idStringInternal customer identifier (primary key)Yes
vast_customer_idStringExternal system customer ID (when integrated)No
customer_typeStringCustomer classification type (Person, Business)Yes
customer_stageStringCustomer lifecycle stage (Customer, Prospect)Yes

Personal and business information for customer records.

Field NameData TypeDescriptionRequired
customer_first_nameStringCustomer first nameNo
customer_last_nameStringCustomer last nameNo
customer_company_nameStringCompany name (for business customers)No
customer_cityStringCustomer cityNo
customer_stateStringCustomer state/provinceNo
customer_zipStringCustomer postal codeNo

Communication channels and consent preferences for marketing compliance.

Field NameData TypeDescriptionRequired
customer_phone_numberStringPrimary phone numberNo
customer_text_consent_statusStringSMS/text messaging consent statusNo
customer_emailStringPrimary email addressNo
customer_email_consent_statusStringEmail marketing consent statusNo
  • Eligible: Customer can receive SMS/text messages
  • NotEligible: Customer cannot receive SMS/text messages
  • Unsubscribed: Customer has opted out of SMS/text messaging
  • WaitingForApproval: Consent request pending customer approval
  • DisabledDuplicate: Account disabled due to duplicate detection

Vehicle records linked to customer profiles with internal and external system mapping.

Field NameData TypeDescriptionRequired
steer_vehicle_idStringInternal vehicle identifierNo
vast_vehicle_idStringExternal system vehicle ID (when integrated)No
vehicle_makeStringVehicle manufacturer (Steer’s recognized/corrected value)No
vehicle_yearStringVehicle model year (Steer’s recognized/corrected value)No
vehicle_modelStringVehicle model name (Steer’s recognized/corrected value)No
vehicle_original_specification_makeStringOriginal vehicle make from initial data entryNo
vehicle_original_specification_modelStringOriginal vehicle model from initial data entryNo
vehicle_original_specification_yearStringOriginal vehicle year from initial data entryNo

Service location and tenant information for multi-location business support.

Field NameData TypeDescriptionRequired
shop_location_nameStringService location nameYes
shop_time_zoneStringLocation time zone (for converting UTC timestamps)Yes
tenant_nameStringBusiness/brand nameYes

Historical appointment and service data aggregated to show most recent activity.

Field NameData TypeDescriptionRequired
last_appointment_dateUnix TimestampMost recent appointment date as Unix timestamp with nanoseconds (scheduled, started, ended, or missed)No
last_visit_dateUnix TimestampMost recent completed service date as Unix timestamp with nanoseconds (paid invoice)No

Tracking information for data synchronization and change detection.

Field NameData TypeDescriptionRequired
updatedUnix TimestampLast modification timestamp with nanoseconds across all related entitiesYes

The customer_stage field is calculated using the following business logic:

Customer

Someone who has visited a shop or exists in the shop management system (VAST). This includes anyone with an external integration ID OR has completed paid invoices.

Prospect

Someone who can potentially visit a shop, or tried to book an appointment with the shop but didn’t finish the booking process. This includes individuals with no external integration ID AND no paid invoices AND has abandoned booking records.

External system integration follows these mapping rules:

  • vast_customer_id is populated when an integration record exists with steer_entity = 'Customer'
  • vast_vehicle_id is populated when an integration record exists with steer_entity = 'Vehicle'
  • Both fields can be null if no integration exists for the respective entity

📅 Appointments

Multiple appointments are aggregated to show the most recent activity across all appointment statuses

💳 Invoices

Multiple invoices are aggregated to show the most recent payment completion

⏱️ Updates

The updated field reflects the latest modification timestamp across all related entities

Understanding when fields may contain null values:

Complete example of a customer record with all fields populated:

{
"steer_customer_id": "4b62d36a-a5d6-4308-8d40-af6358104775",
"vast_customer_id": "0015069558",
"customer_type": "Person",
"customer_stage": "Customer",
"customer_first_name": "Sarah",
"customer_last_name": "Johnson",
"customer_company_name": null,
"customer_city": "Austin",
"customer_state": "Texas",
"customer_zip": "78701",
"shop_time_zone": "America/Chicago",
"customer_phone_number": "+1-512-555-0123",
"customer_text_consent_status": "Eligible",
"customer_email": "sarah.johnson@example.com",
"customer_email_consent_status": "Eligible",
"steer_vehicle_id": "f154d8db-cbe1-461e-bc7b-5fae9eeeead2",
"vast_vehicle_id": "15000171790",
"vehicle_make": "Honda",
"vehicle_year": "2019",
"vehicle_model": "Accord",
"vehicle_original_specification_make": "HONDA",
"vehicle_original_specification_model": "ACCORD",
"vehicle_original_specification_year": "2019",
"shop_location_name": "Central Auto Care",
"tenant_name": "AutoCare Plus",
"last_appointment_date": "1701457200.000000000",
"last_visit_date": null,
"updated": "1750254263.614000000"
}