New Features
Multifamily Unit Mix Summarize By Selector
The Calculated Unit Mix table for Residential rent rolls now includes a "Summarize By" dropdown that controls how units are grouped. Users can choose from three options:
Unit Type (the default for new rent rolls): groups rows by the unit type name (e.g., A1, B2). Rows sort alphabetically.
Bed & Bath: groups rows by the bedroom and bathroom count as a pair. Rows sort by bedroom ascending, then bathroom ascending within each bedroom value.
Bed: groups rows by bedroom count alone.
The selection persists on the rent roll itself, so all users viewing the same rent roll see the same grouping without needing to reselect. Existing rent rolls default to Bed & Bath to preserve the familiar view, while newly created or uploaded rent rolls default to Unit Type.
When a grouping causes values in non-grouping columns to differ across units in the same row, the cell displays "..." to signal mixed values within that group. A group where every unit has no value for a column renders blank.
Occupied and Vacant Subtotal Rows on Rent Roll Tables
Both the Detail and Calculated Unit Mix tables (Residential and Commercial) now display Occupied and Vacant subtotal rows beneath the Total row. These rows break down each column's totals by occupancy status, making it easier to isolate how much rent, square footage, or unit count comes from occupied versus vacant units.
Occupied includes units with a status of Occupied or MTM.
Vacant includes units with a status of Vacant (Commercial), or Vacant, Employee, or Model (Residential).
Subtotal rows are collapsible via an expander on the Total row, which defaults to expanded.
Subtotal values always display as sums, regardless of the rent units toggle setting.
Subtotal rows are hidden in edit state, consistent with the Total row.
Inline Row Notes on Rent Roll Detail Table
Users can now add notes directly to individual rows on the Rent Roll Detail table. A comment icon appears on hover at the right edge of each row, allowing users to annotate specific units without navigating away from the table. Notes persist on the row and are visible to all users viewing the same rent roll.
Rent Roll Column Header Tooltips
Info icons now appear next to column headers on both the Detail and Calculated Unit Mix tables (Residential and Commercial). Hovering over the icon displays a tooltip explaining what that column measures or how it is calculated.
Detail table tooltips include:
Actual: "Rent currently paid by the tenant."
Borrower: "Market rent from a borrower document."
Market: "Market rent calculated from the selected rent comparable set."
Status (Residential): "Occupied and MTM count as occupied. Vacant, Employee, and Model count as vacant."
Status (Commercial): "MTM counts as occupied."
Calculated Unit Mix tooltips adjust based on the rent units toggle. In averages mode ($/Unit or $/SF), Actual and CAM show "Averaged across Occupied and MTM units," while Borrower and Market show "Averaged across units with a populated value, regardless of status." In sums mode (Monthly Total $ or Annual Total $), all rent columns show "Sum across all units, regardless of status."
Improvements
Rent Roll Detail Table Redesign (Residential and Commercial)
The Rent Roll Detail table has been redesigned to align with the visual style used on Cash Flow pages.
Column headers now render in uppercase with a "Lease Info" group header above the lease-related columns (Start / Exp for Residential; Start / Exp / Type for Commercial).
Column headers are sticky on vertical scroll, which engages once the table exceeds 15 rows.
The Rent Units toggle has moved inside the table, positioned directly above the Actual, Borrower, Market, and CAM (Commercial) columns for clearer context.
In edit state, the Rent Units toggle displays a static "Monthly $/Unit" label with no interactivity.
The Market column in edit state now renders with visually distinct disabled styling, making it clear the column is not editable.
Rent Roll Unit Mix Table Redesign (Residential and Commercial)
The Calculated Unit Mix table has been redesigned to match the updated detail table style.
Column headers are now uppercase and sticky on vertical scroll.
The Rent Units toggle has moved inside the table, positioned above the rent columns.
On Residential rent rolls, columns that are not part of the current Summarize By grouping now render with disabled styling. For example, when summarizing by Unit Type, the BR and BA columns appear visually muted to indicate they are not driving the grouping.
Redesigned Add and Delete Row Experience in Rent Roll Edit Mode
Adding and removing units from the Rent Roll Detail table has been streamlined with a more intuitive interaction model.
A permanent "Add New Unit" placeholder row now sits at the bottom of the table in edit state. Clicking into any cell activates the row, and once a valid value is entered, the row becomes a real data row and a fresh placeholder appears below it. New rows default their Status to "Occupied."
Deleting a row is now handled via a delete icon that appears on hover at the right edge of each row. Clicking it removes the row immediately with no confirmation dialog; all changes remain staged until the user saves or cancels.
Import Collateral API: Name Defaults and Improved Error Messages
For API based workflows, two usability improvements were made to the Import Collaterals endpoint:
When the collateral name is omitted or left blank, the system now automatically uses the collateral's address as the name rather than leaving it empty.
Validation error messages now reference the field names users see in the API documentation ("subStatus" and "migrationReference") rather than internal system field names that appeared previously.
Fixes
Document Could Not Be Released to User After Parsing
An issue was resolved where certain documents could not be submitted or released to the user from the Document Upload Center after parsing completed. This occurred in cases where the system could not locate a matching cash flow record for the parsed file, or where user notification delivery failed due to a case sensitivity mismatch in the user's email address. Affected documents can now be released successfully.
Moody's Comparable Link Redirected to Inactive Page
The external link on Moody's CRE comparables previously directed users to reis.com, which is no longer active. The link now correctly points to moodyscre.com.
Schedule of Real Estate Fields Missing from Template Exports
Two fields in the Schedule of Real Estate section for People Contacts (Current Loan Balance and Market Value) were not populating in Excel template exports. The fields rendered as raw tokens instead of resolved values, even though the data was present on the deal. Both fields now populate correctly and match the values shown in the "Download All Data" export.
Loan Pricing Options Tab Failed to Load
The Loan Pricing Options tab on every deal displayed a persistent "Loading Component..." spinner and never rendered the pricing table. This blocked the entire loan pricing workflow with no available workaround. The tab now loads and renders the pricing table as expected. If a genuine loading failure occurs (e.g., a network error), the tab surfaces a visible error state rather than an indefinite spinner.
API Gateway Deal Funds Endpoint Returned Empty Response
The getDealFunds endpoint in the API Gateway was returning only a success response without the expected data payload. The endpoint now returns the full deal funds data as documented.
Persistent "Deal Analysis in Progress" Banner on Deals Created via Bulk Import
Deals created through the admin bulk import grids displayed the "Deal Analysis in Progress" banner for far longer than the stated five minutes, in some cases persisting for over 24 hours. The banner now clears within a timeframe consistent with what the banner communicates to the user.
Deal Score Metrics Lagged One Change Behind
The Deal Score and its Score Breakdown table did not refresh immediately when the primary valuation method or primary cash flow was changed. Instead, the score reflected the previous selection, always lagging one step behind. This meant users could see an inaccurate Deal Score without any indication it was stale. Deal Score Metrics now update on the first change and stay in sync with Deal Level Metrics at all times.
Template and "Download All Data" Exports Produced Corrupted Files
On deals where the stress test could not be calculated due to missing data, generating an Excel template or clicking "Download All Data" produced a file that could not be opened. The export now completes successfully regardless of whether the deal has sufficient data for stress test calculation.