Skip to content

Mortgages

Open property → Mortgages

Overview

A mortgage tracks a secured loan against a property. The record stores lender, original principal, current balance, rate, frequency, payment amount, start date, and the linked accounts (principal / interest / escrow). One property can carry multiple mortgages — primary plus a second mortgage, a refinance, or a HELOC.

Mortgages are managed from the Mortgages subsection on the Property detail Overview tab. There is no standalone Mortgages list page — they always live in context of their property.

UI elements

Add mortgage

Opens the New Mortgage form.

Record payment

Row action (shown only for Active mortgages). Opens the Record Payment dialog described below.

Fields

FieldNotes
LenderFree text.
Original principalLoan amount at origination.
Current balanceLive principal balance — auto-decremented by the principal portion of every recorded payment.
RateAnnual interest rate (%).
Compoundingmonthly (default) or semi-annually-not-in-advance (Canadian residential standard). Affects interest split.
Frequencymonthly / semi-monthly / bi-weekly / weekly.
PaymentScheduled amount per period.
Start dateOrigination / first payment date.
Principal accountLiability account the outstanding balance lives in.
Interest expense accountExpense account interest is posted to.
Escrow accountOptional — used for tax/insurance reserve payments.
Statusactive / paid-off / closed.

Payment split computation

computePaymentSplit is a pure function: given the current balance, annual rate, compounding basis, and payment amount, it splits a single payment into principal / interest / (optional) escrow.

  • Monthly compounding: period rate = annualRate / 12.
  • Semi-annual not in advance (the Canadian convention for residential mortgages): period rate = ((1 + annualRate/2)^(2/paymentsPerYear)) - 1. Different payment frequencies (weekly, bi-weekly, semi-monthly) use the correct per-period conversion.

Interest is always balance * periodRate, rounded to cents. Principal is payment - interest - escrow, clamped to not exceed the current balance.

Record Payment dialog

Opens from the mortgage row’s Record payment button. Shows the computed split before posting — the user can tweak any field before clicking Post.

  1. Click Record payment on the mortgage row.
  2. Confirm the Payment date (defaults to today).
  3. The dialog computes Interest, Principal, and optional Escrow from the mortgage settings and current balance. Override any value if the lender statement differs.
  4. Pick the Cash account the payment is drawn from.
  5. Optional: enter a Memo (becomes the JE memo).
  6. Click Post payment. A JE posts atomically:
Dr Mortgage principal (liability) — principal portion
Dr Interest expense — interest portion
Dr Escrow (if any) — escrow portion
Cr Cash — total

All lines carry propertyId so Property P&L picks up the interest expense under the right property.

Counter increment: mortgage.paymentsMade and mortgage.currentBalance are only updated when the JE helper reports the entry was actually new ($__wasNew === true). Re-running the dialog with the same sourceId is a no-op — no double-count, no double-decrement.

Auto-close: when currentBalance hits 0 (or goes negative — clamped), status flips to paid-off.

Actions

Add a mortgage

  1. On the Property detail Overview tab, click Add mortgage.
  2. Fill lender, original principal, rate, compounding, frequency, payment, start date.
  3. Pick the Principal (liability), Interest expense, and optional Escrow accounts. Defaults come from the COA wizard.
  4. Click Save.

Refinance

v1 has no built-in refinance flow. To model a refinance:

  1. Mark the old mortgage as Closed (status edit).
  2. Create a new mortgage with the new lender, balance, rate, and payment.
  3. Post a journal entry to square the balance transfer (Dr old mortgage liability, Cr new mortgage liability).

A dedicated refinance flow is on the post-v1 list.