π Enhancements
CMMS
"In Storage" Asset Status
A new "In Storage" status is available in the Assets module for equipment that is stored but not actively deployed. It appears alongside the existing statuses (Active, Inactive, Sold, Disposed) and works everywhere asset statuses appear.
What's New:
"In Storage" is selectable in dropdowns, forms, and filters throughout the Assets module
Assets can be transitioned to and from "In Storage" following existing status rules
Available to all clients using the Assets module
Forward-Looking Date Filters
Communication rules and reports can now target dates in the future. Until now, date filters were limited to backward-looking options like "Past 30 Days" β making forward-looking automations like visit reminder notifications impossible without fragile manual workarounds.
What's New:
New preset options: Next 7 Days, Next 14 Days, Next 30 Days
New Custom Days Forward option β enter any number of days (up to 365) to target a specific future window
Filters evaluate dynamically at rule or report execution time β no hardcoded dates that expire overnight
Applies to both communication rule filters and report filters across all forward-looking date fields: Visit Start/End Date, Scheduled Date, Due Date, NTE Expiration, Warranty Expiration, SLA dates, and more
Pricing Controls
A new set of controls keeps vendor invoices aligned to negotiated rates and makes rate issues easy to spot β from the invoice line item grid, to vendor integrations, to reporting.
What's New:
Enforce Negotiated Vendor Rates: Admins can lock a pricing record so vendors cannot change it. Turn on "Do not allow pricing to be modified" on a Subcontractor Product Pricing and vendors will see the approved rate auto-filled and read-only, with helper text directing them to contact the client for changes.
Spot Expired Pricing at a Glance: The Pricing admin grid now flags pricing past its effective end date with a red "Expired" tag and a new status column (Active / Expired / Inactive). Filter to expired-only to refresh rates before a new contract period.
Approved Rate Column: The line item grid shows an Approved Rate column alongside the vendor's entered rate. When the vendor's rate differs, the Approved Rate cell displays in red. When no pricing matches, the column shows "Not Applicable."
Vendor Line Item Class Filtering: When enabled by an admin, vendors only see line item classes they have active pricing configured for. Unauthorized classes simply don't appear in the dropdown.
API Enforcement: Vendor integrations submitting rates via the API are now subject to the same enforcement rules as the UI. Mismatched rates against enforced pricing are rejected with a clear error response showing the approved rate.
Pricing Enforcement Reporting: Approved Rate, Rate Deviation, Rate Deviation Amount, and Pricing Matched are now available as columns in Subcontractor Invoice and Quote reporting and in the data warehouse.
Want to learn more? Reach out to your CSM.
Work Order Creation Source
The "Created By" field on a work order previously only showed who created it β not how. When a work order comes in through the email parser, an API integration, or a PM program, there was no way to tell from the record itself.
What's New:
Work orders created by a user now show the creator's name appended with the source when applicable β e.g., "Manuela Cardenas (via Email Parser)"
Work orders created by a PM program show the program name, with a clickable link for users with permission to view it
Work orders created via API show the API user, or "API User" if the specific user can't be resolved
Visible on the work order record and the grid β extends the existing Created By value, no new field
PM Program: Use Default Vendor Assignment
PM Programs previously required vendors to be manually assigned to each store β a separate configuration that had to stay in sync with default vendor settings. Programs can now pull the default vendor assignment automatically at runtime.
What's New:
New toggle on PM Programs: "Use Default Vendor Assignments for all Stores/Facilities." When enabled, the system resolves the current default vendor for each store every time the program runs β no static assignment stored.
An Exceptions panel shows stores not covered: those with no default vendor configured (highlighted in amber, with a "Set default" link) and those manually opted out
Individual stores can be opted out from the default vendor assignment at the store level
Status line shows coverage at a glance: "Active for 42 of 47 stores"
Want to learn more? Reach out to your CSM.
Trakref Integration: Sync Status Now Reportable
Trakref integration sync data is now available as a reportable data source. Clients can build reports showing which assets are synced, which are reported missing from Trakref, and each record's last sync status β no need to check the integration panel manually.
What's New:
Integration sync data is available as a reportable data source
Reportable columns include sync status, last sync timestamp, external ID, and linked asset
A "Reported Missing" filter isolates assets flagged as missing from Trakref
Reports can be filtered to a specific integration
Billing Requirements Validation
When no billing requirements were configured on an assignment or invoice, the Billing Requirements Met field showed "Yes" β a false positive that gave the impression requirements were passing when none had been set up.
What's Changed:
Assignments and invoices with no billing requirements configured now show "NA" instead of "Yes"
Tooltip now displays the name of each billing requirement and whether it is met or not
"NA" state is reflected consistently across the assignment, invoice, and grid views
API submission performance
High-volume API integrations were experiencing severely degraded performance β a 100-line-item invoice submission could take up to 8 minutes. A query optimization in the workflow recheck path reduces that to under 30 seconds.
What's Changed:
Workflow recheck queries now run in under 1 second, down from ~5 seconds per execution
No change to behavior β the fix is a query optimization only
FexaAI
FexaAI Answers Agent β Ask by Region and Ask by Asset
The Answers Agent keeps learning the way you actually ask questions. Two new filter dimensions arrive this release.
What's New:
Ask by Region: Scope questions to a region β "show me all open priority tickets for the East region" β and get results filtered to that region, composed with your other filters like status, priority, and date. If you manage a single region, the agent already knows your scope.
Ask by Asset: Filter work orders, assignments, and invoices by asset. Ask "show me all open work orders with HVAC assets" or "which invoices have the fryer asset on them" and the agent returns just those records, with the asset shown in the response.
Want to learn more? Reach out to your CSM.
WO Agent: Full Category Path Display
When reviewing an AI-drafted work order in the FexaAI chat, the category now shows its full path from parent to child (e.g., "Building Security | Surveillance | Front Store Monitor") instead of just the leaf name. This makes it easier to catch a miscategorized work order before it gets dispatched.
What's New:
Category display in the WOA review panel shows the full lineage, not just the child
Works for categories at any depth; top-level categories display without error
Display-only change β the stored and submitted category value is unchanged
FM Agent: Work Order Summaries
The FM Agent now generates AI-powered summaries directly on the work order overview. Open a work order and get an instant read on what happened, what's flagged, and what to do next β without reading through every note and update.
What's New:
AI Summary: A combined work order summary appears on the overview, synthesizing notes, attachments, and work order context into a plain-language narrative
Flagged Issues: When the agent detects issues worth attention, they surface as flagged items with nested suggested actions
Next Steps: When there are no flagged issues, a Next Steps section appears with recommended actions based on the current state of the work order. Collapses and expands with a HIDE/SHOW toggle.
Stays current automatically: The summary regenerates when key work order fields change, when notes are updated, or when attachments are added β no manual refresh needed
Correct assignee names: The summary identifies who is doing the work using the actual assignment provider, not unrelated internal users
Correct store name: The Store field shows the specific location name (e.g., "Chicago Downtown #42") rather than the parent business name
Formatted currency: Dollar amounts display with a thousands separator and two decimal places (e.g., $1,208.00)
Want to learn more? Reach out to your CSM.
π Bug Fixes
Work order chat history shows the correct user
The AI chat history was attributing messages to whoever was viewing the work order, not the original submitter.
What's Fixed:
Chat history entries now display the user who submitted the message, regardless of who is viewing the record
AI work order opens in focus from the grid
Launching an AI work order from the work order grid was opening in a background tab instead of bringing the new tab into focus.
What's Fixed:
The new tab now receives focus immediately when launched from the grid
Special characters no longer break chat history
Work order agent history was failing to load when entries contained non-standard characters.
What's Fixed:
History entries with special characters now load correctly
District import language field corrected
The District Manager Language field was mislabeled as required during import, blocking valid imports.
What's Fixed:
The field no longer triggers false validation errors during import
Non-enforced pricing applies consistently
When pricing was configured to allow vendor overrides (not enforced), it was inconsistently applying to line items during invoicing β showing on some invoices and not others with no clear pattern.
What's Fixed:
Non-enforced pricing now applies reliably when a vendor selects a matching line item type
Vendors can see the auto-filled rate and edit it as expected
Enforced pricing continues to lock the rate as designed
βNTE permission inheritance corrected
Setting up a permission group with access to only Client NTE also required granting access to the parent Subcontractor NTE permission β making granular NTE access impossible to configure without over-provisioning.
What's Fixed:
A permission group with read access to Client NTE can now perform Client NTE lookups on work order creation without requiring the parent permission
Granting Client NTE access no longer opens access to Subcontractor NTE records
Symmetric fix applied for Subcontractor NTE
βVendor Performance Metrics: Accuracy Improvements
Two long-standing issues were causing Vendor Performance Metrics to report inaccurate data: custom "Declined"-named completion statuses were being excluded from results, and cancelled visits were being counted against vendor KPIs.
What's Fixed:
Assignment exclusion logic now checks status type rather than status name β custom statuses with "Declined" in the name no longer get incorrectly excluded
Cancelled visits are now excluded from visit-based KPI calculations, matching the existing behavior for cancelled assignments
Default Vendor NTE "Serviced By" field now returns vendors
Searching for a vendor in the "Serviced By" type-ahead field on the Add Default Vendor NTE form was returning an error and showing no results, making it impossible to create Default Vendor NTEs through the UI.
What's Fixed:
The Serviced By field now filters and returns matching vendors as expected when searching
GL Code Reappearing After Removal
When a user removed a GL Code from an invoice and saved, the code would reappear after refreshing the browser β the removal appeared to succeed but the value was persisting.
What's Fixed:
GL Codes now remove correctly and stay removed after saving and refreshing