Feature Toggles
Feature toggles decide how transactions behave in XBuddy — whether a purchase order needs approval, whether stock is tracked by lot, whether payroll requires attendance, and hundreds of similar rules. These are enforcing toggles: turning one on changes what the system requires and how it posts, not just what the UI shows.
XBuddy has two toggle systems:
- ERP Features — the enforcing business-rule toggles described on this page. Managed per company.
- App Feature Catalog — a UI catalog for gradual rollout using
rollout_percentage. It only controls whether a UI element is shown to a slice of users; it does not change transaction behaviour.
Feature toggles are per company and enforcing. Changing one affects live documents. Always test on a non-production company first, then apply to production once you’ve confirmed the behaviour.
Where to find them
| Group | Page |
|---|---|
| Procurement, Sales, Inventory, Finance, Approval | ERP Features /settings/erp-configuration |
| CRM / Sales / Marketing (business) | Business Features /settings/business-features |
| HR / Payroll / Performance / LMS | People Features /settings/people-features |
| Service management | Service Features /settings/service-features |

Procurement toggles
| Toggle | Effect when ON |
|---|---|
require_po_approval | Purchase orders must be approved before they can be issued |
three_way_match | Bill must match PO and goods receipt (qty & price) before payment |
auto_create_grn_from_po | A draft goods receipt is generated automatically from a confirmed PO |
landed_costs | Freight, duty and other landed costs can be allocated to received goods |
require_grn_before_bill | A bill cannot be created until goods are received |
require_pr | Purchases must start from a purchase requisition |
require_rfq | An RFQ step is required before raising a PO |
Sales toggles
| Toggle | Effect when ON |
|---|---|
require_so_approval | Sales orders need approval before fulfillment |
delivery_order_required | Goods must move via a delivery order, not directly off the invoice |
partial_delivery | Orders may be delivered in multiple shipments |
customer_return_rma | Customer returns follow an RMA workflow |
credit_note_from_return | A credit note is generated from an accepted return |
quotation_expiry | Quotations carry and enforce an expiry date |
commission_tracking | Sales commissions are calculated and tracked |
Inventory toggles
| Toggle | Effect when ON |
|---|---|
lot_tracking | Stock is tracked by lot/batch number |
serial_tracking | Individual units are tracked by serial number |
expiry_date_tracking | Items carry expiry dates; FEFO picking is enabled |
multi_warehouse | Stock can be held and moved across multiple warehouses |
reorder_point_alert | Alerts fire when stock falls below its reorder point |
costing_method | Sets valuation method: fifo, avco, or standard |
uom_enabled | Alternative units of measure with conversion are active |
multi_uom_per_product | A product can be bought/sold in units other than its stock unit |
Finance toggles
| Toggle | Effect when ON |
|---|---|
double_entry | Full double-entry journal posting is enforced |
multi_currency | Documents can be issued in foreign currencies |
tax_inclusive_pricing | Line prices are treated as tax-inclusive |
bank_reconciliation | Bank reconciliation workflow is enabled |
budget_control | Spend is checked against budgets before posting |
cost_center | Transactions can/must carry a cost center |
void_requires_reason | Voiding a posted document requires a reason |
Approval toggles
| Toggle | Effect when ON |
|---|---|
po_amount_threshold | POs above the amount require approval |
so_amount_threshold | Sales orders above the amount require approval |
multi_level_approval | Approvals route through multiple levels |
parallel_approval | Multiple approvers act in parallel rather than in sequence |
delegation | Approvers can delegate authority when away |
People toggles
| Toggle | Effect when ON |
|---|---|
onboarding_checklist_required | New hires must complete an onboarding checklist |
probation_review_required | A probation review is mandatory before confirmation |
multi_level_leave_approval | Leave requests route through multiple approvers |
self_service_leave_request | Employees submit their own leave requests |
attendance_required_for_payroll | Payroll cannot run without attendance data |
timesheet_approval_required_for_billing | Timesheets must be approved before they can be billed |
overtime_approval_required | Overtime must be approved before it counts |
lms_auto_issue_certificate | Certificates issue automatically on course completion |

Change a toggle safely
Select a test company
If you run multiple companies, switch to a non-production one. If not, plan the change during a quiet window.
Open the relevant page
Go to the matching page (e.g. /settings/erp-configuration for Procurement/Sales/Inventory/Finance/Approval).
Flip the toggle
Enable or disable the rule. Read its description — it states exactly what changes.
Create a test transaction
Run a representative document end-to-end (e.g. a PO through to a bill) to confirm the new behaviour.
Apply to production
Once verified, make the same change on your production company.
Some toggles have dependencies — e.g. require_grn_before_bill assumes goods receipts are in use, and credit_note_from_return assumes returns are enabled. Enable prerequisites first.
App Feature Catalog (rollout)
Separately, the App Feature Catalog controls gradual UI rollout via a rollout_percentage per feature. Use it to expose a new screen to, say, 10% of users before a full launch. It’s a visibility mechanism only — it never alters posting, stock, or approval logic. Enforcing behaviour always comes from ERP Features above.