Provide a sale vs. refinance analysis for Brix on Belleview, calculating net equity for a sale at $23,900,000 with an $18,558,526 outstanding debt balance and 0.75% brokerage commission, and net additional equity required under both the CMBS and Debt Fund scenarios from the attached JLL term sheet. My primary objective in evaluating these options is maximizing near-term liquidity and my preference between the refinance structures is no preference — show me the numbers. Summarize the net proceeds or equity delta for each scenario side by side and flag any material differences in execution risk, reserves, or cash-out constraints between the two refinance options.
cd /vercel/sandbox && python3 -c "
import pdfplumber
with pdfplumber.open('jll_termsheet.pdf') as pdf:
print('PAGES:', len(pdf.pages))
for i, page in enumerate(pdf.pages, start=1):
text = page.extract_text() or ''
print(f'=== PAGE {i} ===')
print(text)
"
cd /vercel/sandbox && python3 -c "
import pdfplumber
with pdfplumber.open('balance_sheet.pdf') as pdf:
print('PAGES:', len(pdf.pages))
for i, page in enumerate(pdf.pages, start=1):
text = page.extract_text() or ''
print(f'=== PAGE {i} ===')
print(text)
"
cd /vercel/sandbox && python3 -c "
import pdfplumber
with pdfplumber.open('jll_termsheet.pdf') as pdf:
page = pdf.pages[0]
tables = page.extract_tables()
print('num tables', len(tables))
for t in tables:
for row in t:
print(row)
"
Now building the workbook.
mkdir -p output && cat > build_wb.py << 'EOF'
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
wb = Workbook()
ws = wb.active
ws.title = "Sale vs Refi"
FONT = "Arial"
HDR_FILL = PatternFill("solid", fgColor="1F3864")
SUB_FILL = PatternFill("solid", fgColor="D9E2F3")
BLUE = Font(name=FONT, color="0000FF")
BLACK = Font(name=FONT, color="000000")
BOLD = Font(name=FONT, bold=True)
HDR_FONT = Font(name=FONT, bold=True, color="FFFFFF")
TITLE_FONT = Font(name=FONT, bold=True, size=14)
thin = Side(style="thin", color="BFBFBF")
BORDER = Border(top=thin, bottom=thin, left=thin, right=thin)
def setcol(letter, width):
ws.column_dimensions[letter].width = width
setcol("A", 40); setcol("B", 20); setcol("C", 20); setcol("D", 20); setcol("E", 36)
ws["A1"] = "Brix on Belleview — Sale vs. Refinance Analysis"
ws["A1"].font = TITLE_FONT
ws["A2"] = "Englewood, CO | 183 units | As of 6/30/2026 JLL Term Sheet"
ws["A2"].font = Font(name=FONT, italic=True, size=10)
ws.merge_cells("A1:E1")
row = 4
ws.cell(row=row, column=1, value="SHARED INPUTS").font = HDR_FONT
for c in range(1,6):
ws.cell(row=row, column=c).fill = HDR_FILL
row += 1
ws.cell(row=row, column=1, value="Label"); ws.cell(row=row, column=2, value="Value")
for c in range(1,3):
ws.cell(row=row, column=c).font = BOLD
row += 1
shared_start = row
inputs = [
("Sale Price", 23900000, "$#,##0"),
("Brokerage Commission %", 0.0075, "0.00%"),
("Outstanding Debt Payoff (current 1st mortgage)", 18558526, "$#,##0"),
("CMBS Total Funding (gross loan amount, 5yr Full-Term IO)", 18040000, "$#,##0"),
("CMBS Replacement Reserve Funded at Closing ($300/unit)", 54900, "$#,##0"),
("Debt Fund Total Funding (gross loan amount, 3+1+1, 2yr IO)", 18710000, "$#,##0"),
("Debt Fund Origination Fee %", 0.01, "0.00%"),
("Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)", 0, "$#,##0"),
]
labels = {}
for lbl, val, fmt in inputs:
ws.cell(row=row, column=1, value=lbl).font = BLACK
c = ws.cell(row=row, column=2, value=val)
c.font = BLUE
c.number_format = fmt
labels[lbl] = row
row += 1
row += 1
ws.cell(row=row, column=1, value="MEMO: Lender Escrows/Reserves Returned at Sale Payoff (May-2026 balance sheet)").font = Font(name=FONT, italic=True)
escrow_row = row
c = ws.cell(row=row, column=2, value=224993.69+148725.82+42202.64)
c.font = BLUE
c.number_format = "$#,##0"
row += 2
# SCENARIO COMPARISON TABLE
hdr_row = row
ws.cell(row=hdr_row, column=1, value="LINE ITEM").font = HDR_FONT
ws.cell(row=hdr_row, column=2, value="SALE").font = HDR_FONT
ws.cell(row=hdr_row, column=3, value="REFI - CMBS").font = HDR_FONT
ws.cell(row=hdr_row, column=4, value="REFI - DEBT FUND").font = HDR_FONT
for c in range(1,5):
ws.cell(row=hdr_row, column=c).fill = HDR_FILL
r = hdr_row + 1
sale_col, cmbs_col, df_col = "B", "C", "D"
def L(label, bold=False):
global r
ws.cell(row=r, column=1, value=label).font = BOLD if bold else BLACK
# Row: Sale Price / Gross Loan Amount
L("Sale Price / Gross Loan Amount")
ws.cell(row=r, column=2, value=f"=B{labels['Sale Price']}").number_format="$#,##0"
ws.cell(row=r, column=3, value=f"=B{labels['CMBS Total Funding (gross loan amount, 5yr Full-Term IO)']}").number_format="$#,##0"
ws.cell(row=r, column=4, value=f"=B{labels['Debt Fund Total Funding (gross loan amount, 3+1+1, 2yr IO)']}").number_format="$#,##0"
gross_row = r
r += 1
L("less: Brokerage Commission")
ws.cell(row=r, column=2, value=f"=-B{labels['Sale Price']}*B{labels['Brokerage Commission %']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=3, value=None)
ws.cell(row=r, column=4, value=None)
comm_row = r
r += 1
L("less: Loan Origination Fee")
ws.cell(row=r, column=2, value=None)
ws.cell(row=r, column=3, value="Not itemized in term sheet")
ws.cell(row=r, column=3).font = Font(name=FONT, italic=True, size=9)
ws.cell(row=r, column=4, value=f"=-D{gross_row}*B{labels['Debt Fund Origination Fee %']}").number_format="$#,##0;($#,##0)"
origfee_row = r
r += 1
L("less: Required Reserve Funding at Closing")
ws.cell(row=r, column=2, value=None)
ws.cell(row=r, column=3, value=f"=-B{labels['CMBS Replacement Reserve Funded at Closing ($300/unit)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4, value=0).number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4).font = BLACK
reserve_row = r
r += 1
L("less: Other Closing/Legal/Title Costs (est.)")
for col in (2,3,4):
ws.cell(row=r, column=col, value=f"=-{'B' if col==2 else ('B' if False else chr(64+col))}${labels['Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)']}" )
# simpler: reference same input cell for all three
ws.cell(row=r, column=2, value=f"=-$B${labels['Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=3, value=f"=-$B${labels['Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4, value=f"=-$B${labels['Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)']}").number_format="$#,##0;($#,##0)"
othercost_row = r
r += 1
L("less: Payoff of Existing 1st Mortgage")
for col in (2,3,4):
ws.cell(row=r, column=col, value=f"=-$B${labels['Outstanding Debt Payoff (current 1st mortgage)']}").number_format="$#,##0;($#,##0)"
payoff_row = r
r += 1
r += 1
L("NET PROCEEDS / (NET ADDITIONAL EQUITY REQUIRED)", bold=True)
for col,name in zip((2,3,4),("sale","cmbs","df")):
colletter = get_column_letter(col)
formula = f"={colletter}{gross_row}+{colletter}{comm_row}+{colletter}{origfee_row}+{colletter}{reserve_row}+{colletter}{othercost_row}+{colletter}{payoff_row}"
cell = ws.cell(row=r, column=col, value=formula)
cell.number_format = "$#,##0;($#,##0)"
cell.font = BOLD
net_row = r
for c in range(1,5):
ws.cell(row=r, column=c).border = Border(top=Side(style="double"))
r += 2
L("MEMO: Plus Return of Lender Escrows/Reserves at Payoff (Sale only)")
ws.cell(row=r, column=2, value=f"=B{escrow_row}").number_format="$#,##0"
memo_escrow_row = r
r += 1
L("Net Sale Proceeds incl. Escrow Return (memo)", bold=True)
ws.cell(row=r, column=2, value=f"=B{net_row}+B{memo_escrow_row}").number_format="$#,##0"
ws.cell(row=r, column=2).font = BOLD
r += 2
# Key terms comparison block
term_hdr = r
ws.cell(row=term_hdr, column=1, value="KEY LOAN TERMS (from JLL Term Sheet, 6/30/2026)").font = HDR_FONT
for c in range(1,5):
ws.cell(row=term_hdr, column=c).fill = HDR_FILL
r += 1
ws.cell(row=r, column=1, value="").font=BOLD
ws.cell(row=r, column=2, value="SALE"); ws.cell(row=r, column=3, value="CMBS"); ws.cell(row=r, column=4, value="DEBT FUND")
for c in (2,3,4):
ws.cell(row=r, column=c).font = BOLD
r += 1
term_rows = [
("Rate Type", "-", "Fixed", "Floating (Term SOFR + 2.75%, 0.10% floor)"),
("Coupon (at close)", "-", "6.79%", "6.40%"),
("Term / IO", "-", "5yr, Full-Term IO", "3+1+1 (5yr max), 2yr IO"),
("Max LTV / Actual LTV", "-", "75% / 68%", "70.0% / 70.0%"),
("Min DSCR / Actual DSCR", "-", "1.20x IO / 1.04x", "1.00x IO / 1.16x"),
("Actual Debt Yield", "-", "7.71%", "7.43%"),
("Prepayment", "-", "1yr lockout, then defeasance", "12-18 month minimum interest"),
("Reserves at Closing", "n/a (payoff releases escrows)", "$300/unit repl. reserve forward-funded (~$54,900); insurance/tax escrows per lender", "Not itemized; springing lockbox required"),
("Origination / Fee Load", "0.75% brokerage on sale price", "Not itemized in term sheet", "100 bps origination fee on loan amount"),
]
for lbl, s, c1, c2 in term_rows:
ws.cell(row=r, column=1, value=lbl).font = BLACK
ws.cell(row=r, column=2, value=s).font = Font(name=FONT, size=9)
ws.cell(row=r, column=3, value=c1).font = Font(name=FONT, size=9)
ws.cell(row=r, column=4, value=c2).font = Font(name=FONT, size=9)
ws.row_dimensions[r].height = 28
r += 1
# Column headers for scenario table
ws.cell(row=hdr_row, column=1).font = HDR_FONT
# Notes
r += 1
ws.cell(row=r, column=1, value="Notes:").font = BOLD
r += 1
notes = [
"Sale brokerage commission of 0.75% applied to gross sale price only; no other disposition costs assumed unless entered above.",
"CMBS and Debt Fund loan amounts are gross funding per JLL term sheet as of 6/30/2026; both are Interest-Only for their full IO period (CMBS Full-Term IO 5yr; Debt Fund 2yr IO of a 3+1+1 structure).",
"Debt Fund origination fee of 100bps is disclosed in the term sheet notes; CMBS does not disclose an origination fee in this term sheet, so none is deducted (actual CMBS lender fee, legal and title costs will further reduce net proceeds).",
"CMBS reserve funding of $54,900 (=$300/unit x 183 units) reflects the replacement reserve forward-funded at closing per the JLL CMBS pro forma; Debt Fund reserve requirements are not itemized in the term sheet.",
"Lender escrow/impound balances (~$415,922: property tax, insurance and capital reserve escrows) are returned to the borrower only in a sale payoff, shown as a memo add-back; in a refinance these balances typically roll into new lender escrows and are not released as cash.",
]
for n in notes:
ws.cell(row=r, column=1, value="- " + n).font = Font(name=FONT, size=9, italic=True)
ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=4)
ws.row_dimensions[r].height = 26
r += 1
wb.save("output/Brix_Belleview_Sale_vs_Refi.xlsx")
print("saved")
EOF
python3 build_wb.pycd /vercel/sandbox && python skills/xlsx/scripts/workbook_integrity_scan.py output/Brix_Belleview_Sale_vs_Refi.xlsx && python skills/xlsx/scripts/recalc.py output/Brix_Belleview_Sale_vs_Refi.xlsx
cat > build_wb2.py << 'EOF'
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
wb = Workbook()
ws = wb.active
ws.title = "Sale vs Refi"
FONT = "Arial"
HDR_FILL = PatternFill("solid", fgColor="1F3864")
BLUE = Font(name=FONT, size=10, color="0000FF")
BLACK = Font(name=FONT, size=10, color="000000")
BOLD = Font(name=FONT, size=10, bold=True)
HDR_FONT = Font(name=FONT, size=10, bold=True, color="FFFFFF")
TITLE_FONT = Font(name=FONT, bold=True, size=14)
ITALIC = Font(name=FONT, size=10, italic=True)
def setcol(letter, width):
ws.column_dimensions[letter].width = width
setcol("A", 48); setcol("B", 24); setcol("C", 30); setcol("D", 34)
ws["A1"] = "Brix on Belleview - Sale vs. Refinance Analysis"
ws["A1"].font = TITLE_FONT
ws["A2"] = "Englewood, CO | 183 units | As of 6/30/2026 JLL Term Sheet"
ws["A2"].font = ITALIC
row = 4
ws.cell(row=row, column=1, value="SHARED INPUTS").font = HDR_FONT
for c in range(1,5):
ws.cell(row=row, column=c).fill = HDR_FILL
row += 1
ws.cell(row=row, column=1, value="Label").font=BOLD
ws.cell(row=row, column=2, value="Value").font=BOLD
row += 1
inputs = [
("Sale Price", 23900000, "$#,##0"),
("Brokerage Commission %", 0.0075, "0.00%"),
("Outstanding Debt Payoff (current 1st mortgage)", 18558526, "$#,##0"),
("CMBS Total Funding (gross loan amount, 5yr Full-Term IO)", 18040000, "$#,##0"),
("CMBS Replacement Reserve Funded at Closing ($300/unit)", 54900, "$#,##0"),
("Debt Fund Total Funding (gross loan amount, 3+1+1, 2yr IO)", 18710000, "$#,##0"),
("Debt Fund Origination Fee %", 0.01, "0.00%"),
("Debt Fund Reserve Funding at Closing (not itemized in term sheet)", 0, "$#,##0"),
("Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)", 0, "$#,##0"),
]
labels = {}
for lbl, val, fmt in inputs:
ws.cell(row=row, column=1, value=lbl).font = BLACK
c = ws.cell(row=row, column=2, value=val)
c.font = BLUE
c.number_format = fmt
labels[lbl] = row
row += 1
row += 1
ws.cell(row=row, column=1, value="MEMO: Lender Escrows/Reserves Returned at Sale Payoff (May-2026 balance sheet)").font = ITALIC
escrow_row = row
c = ws.cell(row=row, column=2, value=224993.69+148725.82+42202.64)
c.font = BLUE
c.number_format = "$#,##0"
row += 2
hdr_row = row
ws.cell(row=hdr_row, column=1, value="LINE ITEM").font = HDR_FONT
ws.cell(row=hdr_row, column=2, value="SALE").font = HDR_FONT
ws.cell(row=hdr_row, column=3, value="REFI - CMBS").font = HDR_FONT
ws.cell(row=hdr_row, column=4, value="REFI - DEBT FUND").font = HDR_FONT
for c in range(1,5):
ws.cell(row=hdr_row, column=c).fill = HDR_FILL
r = hdr_row + 1
def L(label, bold=False):
global r
ws.cell(row=r, column=1, value=label).font = BOLD if bold else BLACK
L("Sale Price / Gross Loan Amount")
ws.cell(row=r, column=2, value=f"=B{labels['Sale Price']}").number_format="$#,##0"
ws.cell(row=r, column=3, value=f"=B{labels['CMBS Total Funding (gross loan amount, 5yr Full-Term IO)']}").number_format="$#,##0"
ws.cell(row=r, column=4, value=f"=B{labels['Debt Fund Total Funding (gross loan amount, 3+1+1, 2yr IO)']}").number_format="$#,##0"
for c in (2,3,4): ws.cell(row=r,column=c).font=BLACK
gross_row = r
r += 1
L("less: Brokerage Commission")
ws.cell(row=r, column=2, value=f"=-B{labels['Sale Price']}*B{labels['Brokerage Commission %']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=3, value=0).number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4, value=0).number_format="$#,##0;($#,##0)"
for c in (2,3,4): ws.cell(row=r,column=c).font=BLACK
comm_row = r
r += 1
L("less: Loan Origination Fee")
ws.cell(row=r, column=2, value=0).number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=3, value=0).number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4, value=f"=-D{gross_row}*B{labels['Debt Fund Origination Fee %']}").number_format="$#,##0;($#,##0)"
for c in (2,3,4): ws.cell(row=r,column=c).font=BLACK
origfee_row = r
r += 1
L("less: Required Reserve Funding at Closing")
ws.cell(row=r, column=2, value=0).number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=3, value=f"=-B{labels['CMBS Replacement Reserve Funded at Closing ($300/unit)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=4, value=f"=-B{labels['Debt Fund Reserve Funding at Closing (not itemized in term sheet)']}").number_format="$#,##0;($#,##0)"
for c in (2,3,4): ws.cell(row=r,column=c).font=BLACK
reserve_row = r
r += 1
L("less: Other Closing/Legal/Title Costs (est.)")
for col in (2,3,4):
ws.cell(row=r, column=col, value=f"=-$B${labels['Estimated Other Closing/Legal/Title Costs (each scenario, not itemized in term sheet)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=col).font = BLACK
othercost_row = r
r += 1
L("less: Payoff of Existing 1st Mortgage")
for col in (2,3,4):
ws.cell(row=r, column=col, value=f"=-$B${labels['Outstanding Debt Payoff (current 1st mortgage)']}").number_format="$#,##0;($#,##0)"
ws.cell(row=r, column=col).font = BLACK
payoff_row = r
r += 1
r += 1
L("NET PROCEEDS / (NET ADDITIONAL EQUITY REQUIRED)", bold=True)
for col in (2,3,4):
colletter = get_column_letter(col)
formula = f"={colletter}{gross_row}+{colletter}{comm_row}+{colletter}{origfee_row}+{colletter}{reserve_row}+{colletter}{othercost_row}+{colletter}{payoff_row}"
cell = ws.cell(row=r, column=col, value=formula)
cell.number_format = "$#,##0;($#,##0)"
cell.font = BOLD
net_row = r
for c in range(1,5):
ws.cell(row=r, column=c).border = Border(top=Side(style="double"))
r += 2
L("MEMO: Plus Return of Lender Escrows/Reserves at Payoff (Sale only)")
ws.cell(row=r, column=2, value=f"=B{escrow_row}").number_format="$#,##0"
ws.cell(row=r, column=2).font = BLACK
ws.cell(row=r, column=3, value=0).number_format="$#,##0"
ws.cell(row=r, column=3).font = BLACK
ws.cell(row=r, column=4, value=0).number_format="$#,##0"
ws.cell(row=r, column=4).font = BLACK
memo_escrow_row = r
r += 1
L("Net Sale Proceeds incl. Escrow Return (memo)", bold=True)
ws.cell(row=r, column=2, value=f"=B{net_row}+B{memo_escrow_row}").number_format="$#,##0"
ws.cell(row=r, column=2).font = BOLD
r += 2
term_hdr = r
ws.cell(row=term_hdr, column=1, value="KEY LOAN TERMS (JLL Term Sheet, 6/30/2026)").font = HDR_FONT
for c in range(1,5):
ws.cell(row=term_hdr, column=c).fill = HDR_FILL
r += 1
ws.cell(row=r, column=1, value="Term").font=BOLD
ws.cell(row=r, column=2, value="SALE").font=BOLD
ws.cell(row=r, column=3, value="CMBS").font=BOLD
ws.cell(row=r, column=4, value="DEBT FUND").font=BOLD
r += 1
term_rows = [
("Rate Type", "n/a", "Fixed", "Floating: Term SOFR plus 2.75 pct, 0.10 pct floor"),
("Coupon at Close", "n/a", "6.79 pct", "6.40 pct"),
("Term / IO", "n/a", "5yr, Full-Term IO", "3+1+1 (5yr max), 2yr IO"),
("Max LTV / Actual LTV", "n/a", "75 pct / 68 pct", "70.0 pct / 70.0 pct"),
("Min DSCR / Actual DSCR", "n/a", "1.20x IO / 1.04x", "1.00x IO / 1.16x"),
("Actual Debt Yield", "n/a", "7.71 pct", "7.43 pct"),
("Prepayment", "n/a", "1yr lockout, then defeasance", "12 to 18 month minimum interest"),
("Reserves at Closing", "n/a, escrows released at payoff", "Repl. reserve forward-funded, approx $54,900; tax and insurance escrows per lender", "Not itemized; springing lockbox required"),
("Fee Load", "0.75 pct brokerage on sale price", "Not itemized in term sheet", "100 bps origination fee on loan amount"),
]
for lbl, s, c1, c2 in term_rows:
ws.cell(row=r, column=1, value=lbl).font = BLACK
ws.cell(row=r, column=2, value=s).font = BLACK
ws.cell(row=r, column=3, value=c1).font = BLACK
ws.cell(row=r, column=4, value=c2).font = BLACK
for c in range(1,5):
ws.cell(row=r,column=c).alignment = Alignment(wrap_text=True, vertical="center")
ws.row_dimensions[r].height = 30
r += 1
r += 1
ws.cell(row=r, column=1, value="Notes").font = BOLD
r += 1
notes = [
"Sale brokerage commission of 0.75 pct applied to gross sale price only; no other disposition costs assumed unless entered above.",
"CMBS and Debt Fund loan amounts are gross funding per JLL term sheet as of 6/30/2026; both are interest-only for their full IO period (CMBS Full-Term IO 5yr; Debt Fund 2yr IO of a 3+1+1 structure).",
"Debt Fund origination fee of 100bps is disclosed in the term sheet notes; CMBS does not disclose an origination fee in this term sheet, so none is deducted here (an actual CMBS lender fee plus legal and title costs will further reduce net proceeds).",
"CMBS reserve funding of $54,900 (300 dollars per unit times 183 units) reflects the replacement reserve forward-funded at closing per the JLL CMBS pro forma; Debt Fund reserve requirements are not itemized in the term sheet.",
"Lender escrow and impound balances of approximately $415,922 (property tax, insurance and capital reserve escrows) are returned to the borrower only in a sale payoff, shown as a memo add-back; in a refinance these balances typically roll into new lender escrows rather than being released as cash.",
]
for n in notes:
ws.cell(row=r, column=1, value="- " + n).font = BLACK
ws.cell(row=r, column=1).alignment = Alignment(wrap_text=True, vertical="top")
ws.column_dimensions["A"].width = 48
ws.row_dimensions[r].height = 40
r += 1
wb.save("output/Brix_Belleview_Sale_vs_Refi.xlsx")
print("saved", net_row, gross_row, comm_row, origfee_row, reserve_row, othercost_row, payoff_row, memo_escrow_row)
EOF
python3 build_wb2.pycd /vercel/sandbox && python skills/xlsx/scripts/workbook_integrity_scan.py output/Brix_Belleview_Sale_vs_Refi.xlsx && python skills/xlsx/scripts/recalc.py output/Brix_Belleview_Sale_vs_Refi.xlsx
Gate passes. Fix the remaining advisories quickly (row heights, alignment, column width) then read back values.
cd /vercel/sandbox && python3 -c "
import openpyxl
wb = openpyxl.load_workbook('output/Brix_Belleview_Sale_vs_Refi.xlsx')
ws = wb.active
ws.column_dimensions['A'].width = 56
for r in (45,46,47,48):
ws.row_dimensions[r].height = 105
ws.cell(row=r, column=1).alignment = openpyxl.styles.Alignment(wrap_text=True, vertical='center')
for row in ws.iter_rows():
for c in row:
if c.alignment and c.alignment.wrap_text:
c.alignment = openpyxl.styles.Alignment(wrap_text=True, vertical='center')
wb.save('output/Brix_Belleview_Sale_vs_Refi.xlsx')
print('done')
"
python skills/xlsx/scripts/workbook_integrity_scan.py output/Brix_Belleview_Sale_vs_Refi.xlsx
python skills/xlsx/scripts/recalc.py output/Brix_Belleview_Sale_vs_Refi.xlsxGood enough — gate passes, zero errors. Now read back values and save/present.
cd /vercel/sandbox && python3 -c "
import openpyxl
wb = openpyxl.load_workbook('output/Brix_Belleview_Sale_vs_Refi.xlsx', data_only=True)
ws = wb.active
cells = ['B19','C19','D19','B20','C20','D20','B21','C21','D21','B22','C22','D22','B23','C23','D23','B24','C24','D24','B26','C26','D26','B28','B29']
for c in cells:
print(c, ws[c].value)
"
Sale nets ~$5.2M in cash at close; both refinance options require you to write a check, not receive one.
On liquidity alone, the sale is not close: it puts roughly $5.16M in the door immediately, versus needing to inject fresh equity under either refinance structure just to retire the existing loan.
| Metric | Sale | Refi - CMBS | Refi - Debt Fund |
|---|---|---|---|
| Sale Price / Gross Loan Amount | $23,900,000 | $18,040,000 | $18,710,000 |
| Less: Brokerage Commission | -$179,250 | — | — |
| Less: Loan Origination Fee | — | —1 | -$187,1001 |
| Less: Reserve Funding at Closing | — | -$54,900 | — |
| Less: Payoff of Existing 1st Mortgage | -$18,558,526 | -$18,558,526 | -$18,558,526 |
| Net Proceeds / (Net Additional Equity Required) | $5,162,224 | -$573,426 | -$35,626 |
| Memo: Plus Escrow/Reserve Return at Payoff | $415,922 | — | — |
| Memo: Net Sale Proceeds incl. Escrow Return | $5,578,146 | — | — |
The numbers:
Neither refinance produces liquidity — they produce a smaller or larger cash call. If liquidity is genuinely the driver, the sale wins by roughly $5.2–5.6M over the better refinance option (Debt Fund) and by nearly $5.7M over the CMBS quote.
Execution risk and structure differences worth flagging:
Bottom line: if near-term liquidity is the objective, sell — it's not a close call. If you refinance instead, Debt Fund is the far smaller cash draw ($35.6K vs. $573.4K) but carries floating-rate exposure, a shorter firm term, and a stiffer prepay; CMBS locks your rate and term but asks for meaningfully more equity in and has a DSCR figure that needs to be run down with the lender before you rely on it.
This is a read-only snapshot of a RealAI analysis.