Technical white paper

How Underwrite computes every number it shows.

Underwrite is built around a reviewable TypeScript engine. AI can help extract source material into fields, but the underwriting math runs through deterministic functions that can be inspected, tested, and challenged.

392
regression assertions
138
Phase 3 modules
0
LLM steps in math path
E
Section 01

Deterministic engine, no LLM in the math path

The AI layer is deliberately bounded. It can translate broker material into structured input fields with source quotes. Once those fields are set, the math path is pure TypeScript arithmetic. That means an analyst can review the formulas, rerun the same deal, and see identical output.

Engine contract
inputs + deterministic engine = pro forma, debt, returns, memo
AI parser = extraction aid only
math path = no prompt, no sampling, no hidden model state
P
Section 02

Pro forma construction

Revenue and expenses are built year by year. Vacancy is applied to gross potential income, property management and reserves scale with EGI, and each line compounds from the Year 1 assumption.

Operating build
residentialGPR(y) = units * monthlyRent * 12 * (1 + rentGrowth)^(y - 1)
retailGPR(y) = retailSF * rentPerSF * (1 + rentGrowth)^(y - 1)
EGI(y) = GPR(y) + otherIncome(y) - vacancy(y)
NOI(y) = EGI(y) - operatingExpenses(y)
S
Section 03

Sources and uses

Closing costs and origination fees are explicit. Debt is sized against purchase price, while the equity check funds the gap between total uses and loan proceeds.

Closing stack
closingCosts = purchasePrice * closingCostPct
loanAmount = purchasePrice * LTV
originationFee = loanAmount * originationFeePct
equity = purchasePrice + closingCosts + originationFee - loanAmount
D
Section 04

Debt schedule

The base loan is a fixed-rate amortizing mortgage with a balloon at term. Optional mezzanine and refinance overlays are modeled separately, then rolled into blended DSCR and exit payoff logic.

Annual debt service
PMT = loanAmount * (rate / 12) / (1 - (1 + rate / 12)^(-months))
annualDebtService = PMT * 12
DSCR(y) = NOI(y) / annualDebtService(y)
X
Section 05

Exit value

Exit value is based on forward NOI, not the trailing sale-year number. That reflects how buyers price the asset: they are underwriting next year's income.

Sale proceeds
grossSale = NOI(hold + 1) / exitCapRate
netSale = grossSale * (1 - sellingCostPct)
exitCash = netSale - loanBalance(hold)
W
Section 06

Equity waterfall

The waterfall distributes operating cash and exit cash through return of capital, preferred return, catch-up tiers, and promote. Losing deals do not receive phantom preferred return.

Waterfall priority
1. Return LP capital
2. Pay compounded preferred return
3. Split catch-up tiers by hurdle
4. Split residual profit by promote structure
I
Section 07

IRR computation

Project IRR is solved from the equity cash-flow stream. The solver uses Newton-Raphson with a bracketing fallback so distressed and healthy deals both converge.

IRR identity
sum(CF(t) / (1 + IRR)^t) = 0
initial guess = 15%
fallback bracket = -99% to 500%
R
Section 08

Returns decomposition

Underwrite separates the return story into yield, appreciation, leverage premium, equity buildup, paydown, and sponsor economics. Two identical IRRs can have very different risk profiles.

Return attribution
operatingYield = average NOI during hold / purchasePrice
appreciation = annualized net sale growth over basis
leveragePremium = equityIRR - unleveredIRR
T
Section 09

Sensitivity analysis

The sensitivity suite reruns the full engine under changed assumptions: tornado bars, exit-cap and rent-growth heat tables, hold-period curves, vacancy curves, rate curves, DSCR stress, and Monte Carlo.

Sensitivity principle
for each scenario:
nextInputs = applyShock(baseInputs)
nextResults = run(nextInputs)
impact = nextIRR - baseIRR
V
Section 10

Validation guards

Validation guards cover critical input errors, property-type-aware operating bands, lender thresholds, and cross-field consistency risks such as stacked leverage, refinance dependency, and double-growth bets.

Cross-field example
stackedLeverageRisk fires when:
LTV is high
DSCR cushion is thin
exit cap is below entry cap
G
Section 11

Verdict and grade

The pursue/pass verdict is intentionally simple: clear the return threshold and maintain minimum lender safety. The grade is broader, scoring returns, MoIC, DSCR, leverage, cap arbitrage, and LP share.

Verdict gate
PURSUE if projectIRR >= 15% and minDSCR >= 1.0x
all-equity deals bypass DSCR because no debt service exists
C
Section 12

What does and does not leave your browser

The engine runs client-side. Saved deals live in browser local storage. Share links encode deal data into the URL. The parser is the exception: if enabled, pasted source text is sent for extraction, then returned with source quotes.

Confidential Mode disables AI parsing and share flows for sensitive material while keeping manual underwriting fully usable.

B
Section 13

Model boundaries

Underwrite is explicit about what the current engine does not model. Highly bespoke tax structures, unusual credit agreements, custom partnership terms, and enterprise data feeds still belong in analyst, counsel, or firm-specific review.

Read the model-boundary document
AA
Section 14

Worked example: Cherry Street

Cherry Street is the canonical regression anchor. It is the deal we use to detect engine drift because the numbers are broad enough to exercise operating build, debt service, exit value, waterfall, verdict, and memo output.

Cherry Street anchor
purchase price = $8,500,000
senior debt = 65% LTV at 6.25%
hold = 7 years
exit cap = 6.50%
output = pursue-grade mixed-use acquisition memo
Run Cherry Street in the tool