🗄️ EXSPEEDITE CHECKPOINT — Entity Relationship Diagram

checkpoint_db  ·  visibility relationship map  ·  Updated 2026-06-27  ·  CheckPoint v1.31 Product Polish

Multi-tenant hub
Load lifecycle
Messaging / audit
Configuration
Hard FK
Composite FK (company_id + load_number)
Soft reference (no DB constraint)
Logical load key: (company_id, load_number) — Not a declared foreign key. Every load lifecycle query uses this two-column pair as a compound WHERE / JOIN. The application enforces this relationship in PHP; the database does not enforce it as a constraint.
Private assignment extension: track_driver_assignment_tokens soft-joins to track_load_snapshots by (company_id, load_number) and may also be referenced by track_load_snapshots.driver_assignment_token_id. This supports driver_assignment_status = pending_assignment without exposing the driver's full phone to dispatcher UI.
2026 visibility addendum: newer visibility features add track_eta_settings, track_pod_photos, track_share_tokens, track_geofence_events, track_exception_alerts, track_webhook_subscriptions, and track_webhook_delivery_log. Delivery lifecycle fields now include eta_at, reminder_at, eta_reminder_sent_at, pod_submitted, and pod_submitted_at. Integration Events are outbound 214-style email/JSON visibility messages, while track_dot_feed_items remains the cached DOT/feed overlay source.
company_idcompany_idcompany_idcompany_idcompany_idcompany_idcompany_idcompany_idcarrier_idload_number + company_idload_number + company_idtoken_idload_number + company_idload_number + company_idsoft refcompany_id scope
track_users
Multi-tenant hub
ColumnTypeFlags
idintPK
company_namevarchar(150)NN
passwordvarchar(255)NN
is_activetinyint
timezonevarchar(60)NN
contact_emailvarchar(150)
contact_phonevarchar(30)
created_atdatetime
track_carriers
Carrier roster
ColumnTypeFlags
idintPK
company_idintFK
carrier_namevarchar(150)NN
dot_numbervarchar(20)
mc_numbervarchar(20)
sourceenum
is_activetinyint
created_atdatetime
track_carrier_drivers
Driver roster
ColumnTypeFlags
idintPK
carrier_idintFK
company_idintFK
driver_namevarchar(150)NN
driver_phonevarchar(30)NN
driver_emailvarchar(150)
is_activetinyint
created_atdatetime
track_load_snapshots
Load header — lifecycle root
ColumnTypeFlags
idintPK
company_idintFK
load_numbervarchar(50)NN
carrier_namevarchar(150)
driver_namevarchar(150)
driver_phonevarchar(30)NN
statusenum
sms_fallback_usedtinyint
last_reminder_sent_atdatetime
created_atdatetime
track_load_stops
Stop rows — composite FK* cascade
ColumnTypeFlags
idintPK
load_numbervarchar(50)FK*
company_idintFK*
stop_sequenceintNN
milestone_typeenumNN
location_namevarchar(150)
cityvarchar(100)NN
statevarchar(50)NN
scheduled_atdatetime
sms_sent_atdatetime
track_tokens
Driver tracking tokens
ColumnTypeFlags
idintPK
tokenvarchar(64)NN
load_snapshot_idint
load_numbervarchar(50)FK*
company_idintFK*
expires_atdatetimeNN
statusenum
created_atdatetime
track_location_pings
GPS trail — append only
ColumnTypeFlags
idbigintPK
token_idintFK
load_numbervarchar(50)NN
company_idintFK
stop_sequenceintNN
milestone_typeenumNN
latdecimal(10,7)NN
lngdecimal(10,7)NN
accuracydecimal(8,2)
timestampdatetimeNN
received_atdatetime
addresstext
raw_payloadjsonNN
track_messages
Outbound SMS / email
ColumnTypeFlags
idbigintPK
load_numbervarchar(50)
company_idintFK
stop_sequenceint
message_typeenumNN
channelenumNN
recipientvarchar(150)NN
providervarchar(50)
statusvarchar(50)
bodytext
sent_atdatetime
track_event_log
Audit log — no FK constraints
ColumnTypeFlags
idbigintPK
load_numbervarchar(50)SOFT
company_idintSOFT
event_typevarchar(50)NN
event_channelvarchar(30)
event_statusvarchar(30)
messagetext
actorvarchar(100)
ip_addressvarchar(45)
created_atdatetime
track_api_clients
API bearer tokens
ColumnTypeFlags
idintPK
company_idintFK
client_namevarchar(150)NN
bearer_token_hashvarchar(255)NN
is_activetinyint
created_atdatetime
last_used_atdatetime
app_credentials
Per-tenant config
ColumnTypeFlags
idintPK
service_namevarchar(100)NN
credential_keyvarchar(255)NN
credential_valuetextNN
descriptiontext
is_activetinyint
created_atdatetime
updated_atdatetime
system_credentials
Global config — no company scope
ColumnTypeFlags
idintPK
service_namevarchar(50)NN
credential_keyvarchar(255)NN
credential_valuetextNN
updated_atdatetime

Load lifecycle chain

snapshots → stopscompany_id + load_number CASCADE DELETE HIGH
snapshots → tokenscompany_id + load_number · multiple tokens per load possible HIGH
snapshots → assignment_tokenscompany_id + load_number · private driver assignment link HIGH
tokens → pingstoken_id = track_tokens.id · clearest ID join in codebase HIGH
snapshots → pingscompany_id + load_number · map trail & ping counts HIGH

Private phone rules

assignment tokentrack_driver_assignment_tokens.token powers /carrier/assign.php.
masked phone onlyDashboard/report queries should use driver_phone_masked or Phone on file, never raw phone.

Messaging & audit

snapshots → event_logcompany_id + load_number · soft ref · survives cleanup HIGH
snapshots → messagescompany_id + load_number · reminder cron · DDL not found MED

Tenant hub

track_users.idIS the company identifier. No company_id column on this table. HIGH
No declared DB FKsApp does not rely on declared foreign keys in PHP. All relationships are application-enforced. APP-LEVEL

Configuration

app_credentialsScoped by company_id per tenant. No direct SQL join to track_users found. HIGH
system_credentialsGlobal — no company scope. Twilio / SendGrid keys only. HIGH