B&J data model — first-class entities, including TANKS (the most quotable architecture decision)
This is the single most interesting story for the case study.
Generic CRMs treat fuel customers as accounts with an address. Reality is more structured than that — and we modeled it that way.
First-class entities in the B&J CRM schema
| Entity | Why it is first-class (and why a generic CRM gets it wrong) |
|---|---|
| Accounts | Tagged by segment (residential / agricultural / fleet / construction). Carries payment terms, credit limit, rep, acquisition source. A generic CRM has accounts — but does not enforce segmentation in the data model, so segmentation degrades to a free-text field. |
| Locations / Sites | One account ↔ many locations. A farm customer has a farmhouse, a barn, a shop, and a remote field tank — each with its own delivery access notes and degree-day zone. Generic CRMs do not model multi-site accounts as a first-class relation; they treat addresses as a property of a contact. |
| Tanks | Each location has one or more tanks. Each tank carries fuel type, capacity, ownership (customer-owned vs B&J-owned), inspection date, and reorder point. The reorder point is what drives automatic delivery scheduling. No generic CRM models tanks at all. |
| Contacts | Multiple contacts per account, each tagged with role and communication preferences. The bookkeeper gets invoices; the operations manager gets delivery notifications; the owner is the decision-maker on contract renewals. |
| Price contracts | Per-account, per-product, with type (fixed / capped / market rate / budget billing), rate, and effective/expiry dates. Fuel pricing is contract-driven and contract types are nontrivial. Generic CRMs do not model price contracts. |
| Products | Unified catalog of fuels, lubricants, additives, and services. |
| Delivery orders | The operational heart. Date, product, quantity, price-at-delivery, driver, truck, status, classification (automatic / will-call / emergency). |
| Invoices | Line items, HST, due date, payment status. Linked to one or more delivery orders. |
| Payments | Amount, method, date, reference. Drives AR reporting. |
| Interactions | Calls, emails, complaints, site visits. The relationship layer. |
[Verified — crm_project_plan.docx §2.1]
The two most quotable lines
"We treat tanks as first-class objects, not free-text fields."
That one decision is the architectural difference between a fuel CRM and a CRM with fuel pasted onto it.
"Multi-site accounts, fuel-type-specific contracts, degree-day zones, and delivery type are all data, not notes."
See B&J architectural decision: custom platform vs Manage Petro / PDI / Cargas — why custom won for why this needed to be built rather than bought, and B&J architectural decisions worth surfacing in case-study narrative — eight, ranked for how this fits among other case-study-worthy decisions.
Related
Referenced by (5)
- reference Boucher & Jones Fuels — case-study source material, v1 (parent index) relates-to
- decision-record B&J architectural decision: custom platform vs Manage Petro / PDI / Cargas — why custom won relates-to
- reference B&J case study — suggested narrative angles, ranked, with a recommended hybrid lead relates-to
- reference B&J architectural decisions worth surfacing in case-study narrative — eight, ranked relates-to
- reference B&J — database state (v2, verified 2026-05-24) — marketing site is materially read-only relates-to