Process Estimates
Complete guide to viewing, managing, and configuring estimates — categories, products, flow steps, rules, and QuickBooks sync.
Overview
Estimates in RFS Hub are generated through the Estimate Chatbot. When a customer completes the guided flow, the system automatically creates an estimate with line items, pricing, and totals. From the admin area, you can view all estimates, manage the product catalog, configure the chat flow, set up pricing rules, and sync estimates to QuickBooks Online.
Each estimate has a unique number in the format EST-YYYYMMDD-XXXX (e.g. EST-20260312-0001for the first estimate on that date). Estimates are stored with the customer's contact information, all line items, and totals including HST at 13%. The system supports four categories: Alarm System, CCTV/Cameras, Access Control, and Intercom; each has its own products, flow steps, and rules.
Estimates List
Navigate to Estimates in the sidebar to see all generated estimates. Each row shows the estimate number, customer name, email, category, status, QBO sync status, and creation date.
Filtering & Searching
| Filter | Type | Options |
|---|---|---|
| Search | Text input | Search by customer name, email, or estimate number. |
| Category | Dropdown | All (default), Alarm, CCTV, Access Control, Intercom, or any custom categories. |
| Status | Dropdown | All (default), Draft, Sent. |
| QBO Status | Dropdown | All (default), Pending (not yet synced), Synced, Error. |
Estimate Details
Click the expand arrow on any estimate row to see its details — all line items with quantities and unit prices, grouped by how each product is billed (for example equipment, installation services, monitoring). You can also see the QBO sync status and any error messages.
QuickBooks Online Sync
When QuickBooks Online (QBO) is connected, you can push estimates to QBO to create corresponding estimate records in your accounting system. The QBO connection is set up under Hub → Integrations → QuickBooks.
Pushing Estimates to QBO
There are three ways to push estimates:
- Single push — Click the "Push to QBO" button on an individual estimate row.
- Selected push — Check the boxes next to multiple estimates, then click "Push Selected."
- Sync All Pending — Click "Sync All Pending" to push all estimates with status "pending" or "error" to QBO at once.
If an estimate has already been synced, the button shows "Re-sync" instead.
Bulk Sync
Use the "Select All" checkbox to select all pushable estimates (those not yet synced), then click "Push Selected" to sync them in batch. A confirmation dialog appears before the bulk sync begins.
Estimate View Page
Each estimate has a public view page at /estimate/view/[id]. This is the page customers see when they receive an estimate link. It shows:
- Company header with name, phone, and email.
- Estimate number and date.
- Customer name, email, and phone.
- Line items table with product name, quantity, unit price, and rolled-up subtotals by billing type.
- Subtotals for equipment, installation, one-time, and monthly (as applicable).
- HST calculation and grand total.
- Notes section with any applicable notes.
Printing & PDF
The estimate view page includes a Print button that opens the browser print dialog. You can print to paper or save as PDF. The page is styled for clean printing with proper page breaks.
Estimate configuration (Hub)
Categories, products, flow, rules, selectors, notes, and the estimate knowledge base are edited in Hub → Estimate System (/hub/estimate). That page has tabs for overview, categories, products, flow builder, rules, selectors, notes, knowledge base, and test scenarios. The legacy Settings → Estimate tabs for this data were removed — use the Hub Estimate System page instead.
Categories
Categories define the types of security systems you offer estimates for. Each category has its own flow, products, and rules. Manage them under Hub → Estimate System → Categories.
Category fields
| Field | Required | Description |
|---|---|---|
| Slug | Yes | A unique URL-friendly identifier. Must start with a lowercase letter and contain only lowercase letters, numbers, and underscores. Cannot be changed after creation. Example: cctv, access_control |
| Display Name | Yes | The name shown to customers in the chatbot. Example: "CCTV / Camera System" |
| Display Order | No | Numeric sort order. Lower numbers appear first. Default: 0. Use the up/down arrows to reorder. |
| Icon | No | A Lucide icon to display next to the category. Options: shield-alert, camera, door-open, phone. |
| Visibility | Yes | public — customers can start this category in the chatbot (subject to publish checks). internal / hidden — not offered to customers from the picker. |
Products
The product catalog contains all items that can appear on an estimate. Each row has oneunit price plus metadata describing what kind of line it is. Manage products under Hub → Estimate System → Products.
Product fields
| Field | Required | Description |
|---|---|---|
| Category | Yes | Which category this product belongs to. |
| Name | Yes | Unique catalog key (stable identifier). Example: panel_dsc_powerseries |
| Description | Yes | Customer-facing label on the estimate. |
| Item type | No | Product or Service (legacy column). |
| Item kind | Yes | Equipment, installation, monitoring, lease, service, fee — drives how totals and PDFs group the line. |
| Billing cycle | Yes | One-time, monthly, or annual. |
| Unit price | No | Price per unit in dollars. Default: 0. |
| Install labor | No | On equipment rows, optional per-unit install labor rolled into the estimate (separate installation line items are modeled as their own products when needed). |
| QBO item id / SKU | No | QuickBooks linkage for sync. |
| Sort order | No | Display order within the category. |
| Active | No | Inactive products are not added by rules. |
You can also import products from QuickBookswhen QBO is connected. Click the "Import from QBO" button to pull products from your QuickBooks account.
Selectors
Selectors define which products appear in the product grid when the flow uses a product_selector step. Rows are scoped by category(the step uses that category's selector set). Configure them under Hub → Estimate System → Selectors.
Chat flow (Flow Builder)
Flow steps and transitions are managed on the Flow Builder tab (visual graph). Each step captures one piece of information; edges carry conditions that decide what is asked next.
Step Fields
| Field | Required | Description |
|---|---|---|
| Step Key | Yes | A unique identifier for this step. Use lowercase letters, numbers, dots, and underscores. Example: camera.count, installation_type |
| Category | No | Which category this step belongs to. Select "Shared" for steps used across all categories (like contact info). Otherwise select a specific category. |
| Field Name | Yes | The answer field name where the customer's response is stored. This name is used in transition conditions and product rules. Example: camera_count, installation |
| Question | Yes | The question text shown to the customer. Example: "How many cameras do you need?" |
| AI Hint | No | Extra context for the AI to help present the question naturally. Example: "Suggest 4-8 cameras for a typical home. More for larger properties." |
| Input Type | Yes | How the customer provides their answer:
|
| Options | For choice type | The available choices. Add options one by one. Each option is displayed as a clickable chip. Example: ["New Installation", "Upgrade Existing", "Add More Cameras"] |
| Phase | No | Which phase of the flow this step belongs to: system_selection, requirements (default), contact, or confirmation. |
| Sort Order | No | Display order within the flow. Default: 0. |
| Terminal | No | If enabled, this step ends the flow (no more questions after it). Default: Off. |
| Active | No | Toggle to enable/disable the step. Default: Active. |
Transitions
Transitions define which step comes next based on the customer's answers. Each transition has a from step, a to step, a condition expression, and a priority.
Conditions use a simple expression language. Examples:
always— Always take this transition (used as a fallback).installation=new— Take this transition when the "installation" answer is "new."camera_count>4— Take this transition when camera_count is greater than 4.installation=new AND camera_count>4— Compound conditions.
When multiple transitions match, the one with the lowest priority number wins (priority 1 is evaluated before priority 10).
Product Rules
Product rules determine which products get added to the estimate and in what quantities, based on the customer's answers. Manage rules under Hub → Estimate System → Rules (quantity mode: fixed, from answer field, or formula).
Rule Fields
| Field | Required | Description |
|---|---|---|
| Rule Name | Yes | A descriptive name for this rule. Example: "Add NVR for new CCTV installations" |
| Category | Yes | Which estimate category this rule applies to. |
| Condition | Yes | When this rule should activate. Uses the same expression language as transitions. Use always to always apply. Example: installation=new AND camera_count>0 |
| Product | Yes | Which product to add to the estimate when the condition matches. Select from products in the same category. |
| Quantity | Yes | How many of the product to add. Can be:
|
| Priority | No | Rule evaluation order. Lower numbers are evaluated first. Default: 10. |
| Active | No | Toggle to enable/disable the rule. Default: Active. |
Notes
Notes are conditional text blocks that appear on the estimate document. They can be used for disclaimers, terms, warranty information, or any other text that should appear based on the estimate category or customer's answers. Manage notes under Hub → Estimate System → Notes.
Estimate Knowledge Base
The estimate KB contains articles specific to the estimate flow. These help the AI answer questions during the estimate conversation — for example, explaining the difference between camera types or what monitoring includes. Manage the estimate KB on the KB tab of Hub → Estimate System.
Testing and validation
Use the Test tab on Hub → Estimate System to run the full flow and rules against saved scenarios. For publish workflows, load a saved scenario and use Run & record so a passing run is stored on that scenario (required before a category can be set to public).
The Overview tab summarizes validator results and recent runtime diagnostics from live sessions. The Flow Builder also validates continuously and blocks saves when errors remain.
The Estimate API Test page at /hub/estimate-api-test lets you evaluate condition and quantity expressions in isolation.