Customers
A customer in TuffOps is whoever you bill — a homeowner, a property management company, a hotel, the public works department. Almost everything else in the product hangs off a customer: units are owned by them, work orders are scheduled for them, invoices are sent to them.
Three customer types
TuffOps recognizes three customer types: Residential, Commercial, and Government. The type drives a few small but useful behaviors:
| Type | What it usually means | Typical visual cue |
|---|---|---|
| Residential | Individual homeowner, one address, one or two units. | Green tag |
| Commercial | A business — restaurant, office, retailer, hospitality property. | Blue tag |
| Government | Public sector — agencies, ministries, utilities. | Yellow tag |
The type is not a hard wall. A commercial customer can have a single unit, and a residential customer can have ten. The type mostly affects how customers are color-coded in the index and how reports group them.
Names: people, companies, or both
A customer record has three name fields: First Name, Last Name, and Company Name. At least one of First Name or Company Name is required. This means:
- A residential customer can be just
First Name+Last Name. - A commercial customer can be just a
Company Namewith no contact person. - A commercial customer with a primary contact uses all three (the display name becomes
First Last (Company)).
The display name is computed automatically — you don't pick which one to show.
Contact info is multi-valued
The Email and Phone fields are stored as comma-separated lists. A customer can have multiple emails and multiple phone numbers in a single record. This matters for two flows:
- Notifications (quotation sends, customer-facing reminders) go to every email on the record.
- Customer request matching uses any of the listed phones or emails to identify a returning caller.
Phone numbers are normalized when stored. Local numbers default to the tenant's configured country and area code, so 5551234 becomes +1-869-555-1234 when you save. International numbers must include a + prefix.
Customer integration (sync)
If customer_integration_enabled is on, customer records are sourced from an external system (typically QuickBooks). When the integration is on:
- The Add Customer and Edit Customer forms hide the fields that the external system owns. You manage the customer in QuickBooks and sync.
- The
remote_idcolumn on the customer record tracks the external system's identifier. TuffOps uses this to upsert without duplicates. - Importing customers from a CSV is disabled — the external system is the source of truth.
If the integration is off, TuffOps owns the customer data and you manage everything in-app.
Discount rate
Each customer has an optional discount_rate (a percent). When set, this discount is applied automatically to quotations and work orders for that customer. It's a useful lever for negotiated rates with large accounts.