Building Controls & Solutions — PoC Analysis
Status: Discovery complete — PoC in progress Contact: Jason Bail — Senior Enterprise Engineer (18yr P21 SME) | Adam Martinez — Field Ops (San Antonio) Company: Building Controls & Solutions, Farmers Branch TX Revenue: ~$84M | Locations: ~18 physical branches | Ownership: PE-backed (Platte River Equity) ERP: Epicor Prophet21 (Epicor private hosting — NOT Azure, NOT on-prem) Email: Office 365
Discovery — March 2, 2026
Section titled “Discovery — March 2, 2026”Order Volume (Aug 2025 – Feb 2026)
Section titled “Order Volume (Aug 2025 – Feb 2026)”Data provided by Jason post-call (ordermatic.xlsx). Two order types: N = actual confirmed orders,
Y = projected/quote orders.
| Month | Actual Orders | Quote Orders | Total | Total Lines | Avg Lines | Orders/Day |
|---|---|---|---|---|---|---|
| Aug | 5,608 | 1,940 | 7,548 | 19,972 | 2.65 | 359 |
| Sep | 5,925 | 1,909 | 7,834 | 21,016 | 2.68 | 373 |
| Oct | 6,878 | 2,256 | 9,134 | 26,418 | 2.89 | 397 |
| Nov | 5,769 | 1,787 | 7,556 | 19,108 | 2.53 | 398 |
| Dec | 7,103 | 1,926 | 9,029 | 20,844 | 2.31 | 430 |
| Jan | 6,877 | 2,597 | 9,474 | 23,556 | 2.49 | 451 |
| Feb | 6,530 | 2,871 | 9,401 | 23,662 | 2.52 | 495 |
7-month totals: 59,976 orders | 154,576 lines Monthly average: ~8,568 orders | ~22,082 lines Daily average: ~408 orders/day — trending upward (359 Aug → 495 Feb, +38%) Average lines/order: 2.5 (Jason estimated 5 on the call — reality is half that)
Note: Jason estimated 1,500-2,000 orders/day on the call. Actual data shows ~408/day. Likely either (a) this dataset covers a subset of branches, or (b) he was thinking line items. Clarify before finalizing pricing.
Pricing Implications
Section titled “Pricing Implications”At standard $0.40/line with $2.50 minimum:
- Average order = 2.5 lines × $0.40 = $1.00 — minimum kicks in on almost every order
- At $2.50 minimum: ~$21,400/month — too steep to sell
Recommended pricing for BCS profile:
- $1.25/order flat for orders ≤5 lines (covers short orders profitably)
- $0.35/line for each line over 5 (captures project orders)
- At 8,568 orders/mo avg → ~$10,700/month
Email orders (~60% of volume per Jason) = ~5,100/month to start. Target: grow to full volume over 6 months.
Core Pain Points
Section titled “Core Pain Points”1. Individual rep inboxes — no centralization (most critical) Orders go directly to individual sales rep inboxes. When a rep is out, no one else has access → orders missed → irate customers. Branch managers (e.g. “Daniel” in Dallas) handle the majority of order entry; when they’re out, the whole branch backs up.
Jason: “He doesn’t give out his password… orders get missed or nobody’s taking care of it.”
They’ve discussed generic branch mailboxes (sanantonio.orders@, dallas.orders@, etc.) but
haven’t implemented. Our forwardable email approach with admin oversight is the right solution
and a better fit than Canal’s per-rep OAuth model (too much change management).
2. CSR context-switching Counter customers walk in while email orders pile up. CSRs bounce between walk-in traffic and email queues constantly. Desired state: email handled in background so CSRs focus on the relationship in front of them.
3. Ship-to duplicate explosion Reps create new ship-to records instead of searching for existing ones → 5+ duplicate addresses for the same location. Rule: never auto-create a new ship-to. Match to existing, or if ambiguous, pick the first and let the human override.
4. Poor product data Reps go to competitors’ websites (Nuco, etc.) to look up part numbers, descriptions, dims/weights because BCS’s own P21 data is incomplete. They’re building a Salsify catalog linked by part number (not synced back to P21 yet) — future enrichment source.
Technical Environment
Section titled “Technical Environment”- P21: Epicor private hosting. Has API access (Data Services OData + Transaction API).
- Email: Office 365. Orders go to individual rep inboxes, not a shared mailbox.
- Jason’s setup: Secondary SQL Server running after-hours automations + data cleansing (linked to P21). He’s technically sophisticated — not a black-box buyer.
- Competitor evaluated: Canal. Verdict: “fantastic product, can’t sell the ROI on price.” Canal’s per-rep OAuth auth was also flagged as a change management barrier.
- Salsify: Product enrichment platform (linked to P21 via part number). Future integration opportunity — could feed our item matching layer.
Order Flow
Section titled “Order Flow”- ~60% email/phone, ~40% counter walk-in
- Orders arrive in individual rep inboxes (not a central queue)
- Counter traffic peaks early morning (contractors picking up for the day’s job)
- Handwritten notes are used — CSRs write orders during phone calls, then enter in P21
- Outside sales reps often hand off to inside team for entry (they don’t want to learn the system)
Catalog Complexity
Section titled “Catalog Complexity”Product families from building-controls.com:
- Honeywell / Resideo (thermostats, sensors, actuators, controllers)
- 75F building automation
- EasyIO field controllers
- Distech Controls
- Pietro Fiorentini gas equipment
Part number variants critical to preserve exactly:
/Usuffix — field install vs factory (T7350D1006 ≠ T7350D1006/U)-DR— DIN rail mount-WX— weatherproof75F-prefix,VEL-,DPT-model codes- Distech:
EC-xxx-N-LON,ECLYPSE-N-V
Fit Assessment
Section titled “Fit Assessment”| Area | Status | Notes |
|---|---|---|
| Order volume | ✅ HIGH | ~408/day, +38% period trend (Aug 25–Feb 26). Strong candidate. |
| Email as primary channel | ✅ HIGH | ~60% email/phone. Core pain is inbox chaos, not PDF complexity. |
| P21 API access | ✅ YES | Epicor private hosting. Data Services + Transaction API confirmed. |
| Ship-from routing need | ✅ HIGH | ~18 branches. Branch-local customer assignments. |
| Catalog/xref complexity | ⚠️ HIGH | Poor P21 data quality. Salsify as future source. |
| Ship-to deduplication | ⚠️ HIGH | Existing duplicates. Never auto-create — match only. |
| Email infrastructure | ✅ OK | O365. Forwardable approach works without per-rep OAuth. |
| Change management risk | ✅ LOW | Jason + Adam are motivated. Canal comparison sets low bar on UX. |
| Overall fit | ✅ HIGH | Strong product-market fit. Email-first demo is the right lead. |
P21 Integration Architecture
Section titled “P21 Integration Architecture”Read (Data Services — OData)
Section titled “Read (Data Services — OData)”inv_loc: inventory by location (branch) — used for ship-from routinginv_mast: item master (part numbers, descriptions)- Customer, contact, and ship-to data (critical for deduplication)
Write (Transaction API)
Section titled “Write (Transaction API)”oe_hdr: order header (customer, ship-to, PO number)oe_line: order lines — each line supportssource_loc_id(ship-from branch override)
Ship-To Deduplication Rule
Section titled “Ship-To Deduplication Rule”Never auto-create a new ship-to. Matching logic:
- Exact ship-to ID match from PO
- Fuzzy address match against existing ship-tos (normalize before compare)
- If multiple matches: present options to human, default to first
- If no match: flag for human review — do NOT create a new record
PoC Scope
Section titled “PoC Scope”What Jason Needs to See Thursday (March 5, 9-11am)
Section titled “What Jason Needs to See Thursday (March 5, 9-11am)”The demo must lead with email, not file upload. File upload is the fallback — email is the hero.
Required for PoC demo:
- Email triage — forwarded email → AI recognizes it as an order → appears in review queue
- Admin oversight view — one admin account sees orders from multiple reps’ inboxes
- Item matching — extract line items → match against BCS catalog (Typesense) with 3-tier fallback
- Ship-to matching — resolve to existing ship-to, flag on ambiguity, never create new
- Handwritten note capture — photo → extracted order (Adam liked this specifically)
- Extraction quality — BAS/HVAC part numbers with suffixes preserved exactly
Nice-to-have (show if time):
- Branch-level filtering in admin view
- Cross-reference memory (previous orders informing future matches)
Out of scope for PoC (see docs/product/email-inbox-ux.md):
- OAuth/direct O365 connector (forwardable is fine for PoC)
- Inbox management tools (remove, label, status changes)
- Order follow-up threads
- Delegated access configuration UI
Phase 1 — PoC Checklist
Section titled “Phase 1 — PoC Checklist”- Typesense catalog seed (
seed-bcs-typesense.mjs) — BAS/HVAC SKUs across 5 families - Prompt config (
bcs-prompt-config.json) — part number variant rules - Connection setup script (
create-bcs-connection.mjs) - Update prompt config: add email-specific extraction rules (sender → customer lookup)
- Ship-to deduplication logic in enrichment step
- Admin “all inboxes” view — wire up org-level email queue
- BCS-specific sample emails for demo (HVAC orders, ~5 lines, O365 format)
- P21 mock (Mockoon) —
ship_to,oe_hdr,oe_lineendpoints - End-to-end demo: email forward → triage → review → P21 mock
Phase 2 — Production
Section titled “Phase 2 — Production”- Live P21 Data Services OData connection
- Transaction API write integration
- Full catalog import from P21 item master
- Salsify enrichment integration (part data)
- O365 OAuth connector (direct inbox access, no forwarding required)
- Multi-branch inventory routing
- Delegated inbox access + access management UI
Business Case
Section titled “Business Case”- Monthly volume: ~8,568 orders | ~22,082 lines (Aug 25 – Feb 26 avg, trending up)
- Email share: ~60% → ~5,100 orders/month at launch
- Proposed pricing: $1.25/order flat (≤5 lines) + $0.35/line over 5
- Projected MRR at launch (email orders only): ~$6,375/month
- Projected MRR at full volume: ~$10,700/month
- Time savings: Jason cited “can’t get home by five” — at 2+ min/order manual entry, full volume automation = ~280+ hours/month recovered across BCS branches
- Competitor: Canal evaluated and rejected on price. We are the affordable alternative with a better fit for their distributed rep inbox problem.