Loans

When you take out a loan — a vehicle loan, a mortgage on the office, an SBA term loan — the accounting picture has three moving parts: a liability account that tracks what you still owe, an interest expense account that captures the cost of borrowing, and the bank account the payments come from. Solid Accounting tracks all three with a built-in amortization schedule so each payment correctly splits between principal and interest.

The accounting picture

When the loan funds:

DR  Bank (proceeds you got)              50,000
CR  Long Term Liability — Auto Loan      50,000

Then each periodic payment splits between principal (paying down the liability) and interest (an expense):

Monthly payment of $1,083.04 on a 5-year, $50,000, 5.5% loan
DR  Long Term Liability — Auto Loan        853.87  (principal)
DR  Interest Expense                       229.17  (interest)
CR  Bank                                 1,083.04

Over time, the principal portion grows and the interest portion shrinks — that's why loans have amortization schedules: a payment-by-payment table of how each payment splits.

Setting up a loan

Solid stores each loan as a record with the parameters needed to compute the amortization schedule:

FieldNotes
NameHuman-readable identifier (e.g. Truck loan — 2026 F-150)
Liability accountThe Long Term Liability or Other Current Liability account holding the balance
Interest expense accountWhere the interest portion of each payment lands
Payment accountThe bank or credit-card account that funds the payments
Original amountThe principal balance at funding
Current balanceWhat you still owe (auto-updates with each payment)
Interest rateIn basis points (5.5% = 550 bp)
TermTotal loan length in months
Payment amountThe fixed periodic payment
Start dateWhen the loan funded
First payment dateWhen the first payment is due
Payment frequencymonthly, biweekly, or weekly
Active flagMarks the loan as paid off when balance reaches zero

When you create the loan, Solid computes the full amortization schedule — every payment, the principal/interest split, and the running balance after each — and stores it in loan_amortization. From then on, recording a loan payment is a one-click operation that posts the right split.

Recording payments

The loan-payment journal entry uses transaction_type = 'loan_payment'. From the loan's view: Record Payment. Solid:

  1. Looks up the next-scheduled amortization row
  2. Creates a journal entry with the principal/interest split per the schedule
  3. Updates the loan's current balance
  4. Marks that amortization row as paid

Multi-line shape:

Payment number 7 on the truck loan
DR  Long Term Liability — Truck Loan       853.87
DR  Interest Expense                       229.17
CR  Bank                                 1,083.04

The entry_number references the loan and payment number for traceability.

Extra payments / principal-only

If you make a one-off extra payment toward principal, record a separate loan-payment entry with the schedule's interest = $0 and the entire amount toward principal:

DR  Long Term Liability — Truck Loan       500.00  (principal-only)
DR  Interest Expense                         0.00
CR  Bank                                   500.00

Solid recomputes the remaining schedule on the fly so future payments still close out the term correctly. The original amortization schedule stays in the system as historical record; an adjusted schedule reflects what actually happens going forward.

Amortization schedule formula

The standard amortization formula:

P = (r × PV) / (1 − (1 + r)^−n)

where:
  P  = periodic payment amount
  r  = periodic interest rate (annual rate / payments-per-year)
  PV = present value (loan principal)
  n  = total number of payments

For a $50,000 loan at 5.5% annual, 60 months:

  • r = 0.055 / 12 = 0.004583
  • n = 60
  • P = (0.004583 × 50000) / (1 − 1.004583^−60) = $954.83

For each payment, the interest portion is current_balance × r; the principal portion is P − interest; the new balance is current_balance − principal. The schedule iterates this for n payments.

Solid's amortization runner uses integer-cents math throughout (no floating-point) and enforces that the final payment closes the balance to exactly zero — any rounding remainder absorbs into the last payment.

Payment frequency variants

FrequencyPeriodic ratePayments per year
monthlyannual / 1212
biweeklyannual / 2626
weeklyannual / 5252

Biweekly and weekly schedules pay down the principal faster than the equivalent monthly schedule, even at the same annual rate, because interest compounds less between payments. Solid handles all three identically — the formulas just use different period counts.

Reports

Two loan-specific reports:

  • Loan Schedule — the full amortization table for a specific loan: payment number, date, amount, principal, interest, balance after. Useful for auditing or for showing a lender.
  • Loan Summary — every active loan with original amount, current balance, interest paid year-to-date, next payment date.

Both export to PDF and CSV.

Common gotchas

Bank statement shows a payment of $1,083.05 but Solid posts $1,083.04. Common rounding mismatch. Banks compute amortization to the nearest cent per payment with various rounding rules; Solid uses integer-cents math but the rounding may differ by a penny per payment. Resolve via a Reconciliation Discrepancy adjustment of the difference, or post a one-line journal entry of $0.01 to a Rounding expense account.

Refinanced the loan — what do I do? Two journal entries:

  1. Pay off the old loan — DR Old Loan Liability for the remaining balance, CR Bank (or CR New Loan Liability if the refi proceeds funded the payoff)
  2. Create the new loan record — name, principal, rate, term as the new loan terms

Mark the old loan inactive. The amortization schedule for the new loan starts fresh.

Interest rate is variable (ARM, HELOC, prime+). Solid's amortization assumes a fixed rate. For variable-rate loans:

  • At each rate-reset date, edit the loan's interest_rate
  • Solid recomputes the remaining amortization at the new rate
  • Past payments stay as posted

Loan funded but interest-only for the first few months. Set up the loan with the post-interest-only parameters (the principal balance after the IO period, and the term remaining). For the IO period itself, post manual journal entries each month: DR Interest Expense / CR Bank.

Extra payment doesn't seem to update the schedule. Check the loan's current_balance after the extra payment posted; it should be lower. The displayed schedule may be the original; the adjusted schedule reflects the new path. Look at the Loan Schedule report and confirm the "from this point" view shows fewer remaining payments.

Cross-references