Spreadsheet-First Build Guide (Ch01–Ch04)

Goal

You are going to build the accounting-cycle workbook manually in a spreadsheet first:

Transactions → Journal → Postings → Trial Balance → Adjustments → Adjusted TB → Closing → Post-close TB

Then you will run LedgerLoom on the same inputs and compare results.

This is the fastest way to learn, because you already know what the data means before a tool verifies it.

What data to use

Use the canonical data shown here:

You should not invent your own numbers yet. Use the same dataset so your results match the book and LedgerLoom.

Spreadsheet setup (works in Google Sheets or Excel)

Create a new spreadsheet file. Add these tabs:

  • COA (chart of accounts)

  • Journal (general journal)

  • Postings (optional, can be auto-generated with formulas)

  • TB_Unadjusted (unadjusted trial balance)

  • Adjustments (adjusting entries journal)

  • TB_Adjusted (adjusted trial balance)

  • Closing (closing entries journal)

  • TB_PostClose (post-close trial balance)

Conventions (important)

1) Debit/Credit are separate positive-number columns. Do not enter negative numbers in debit/credit columns.

2) One journal entry can have multiple lines. A “single transaction” often produces 2+ journal lines.

3) Always verify the invariant: Total Debits = Total Credits (for each entry, and for the whole journal).

4) Dates: Use ISO dates like 2026-01-05 (YYYY-MM-DD).

Step 1 — COA tab

Copy the chart of accounts (from the data pack) into your COA tab.

Recommended columns:

  • account_id (or number)

  • account_name

  • account_type (Asset/Liability/Equity/Revenue/Expense)

  • normal_side (Debit or Credit)

Step 2 — Journal tab (transactions)

Create these columns in Journal:

  • date

  • entry_id (you make this up: JE-001, JE-002, …)

  • description

  • account

  • debit

  • credit

Now, take each row from the canonical transactions.csv and translate it into journal lines.

How to translate “events” into journal lines

A transaction/event is a story; a journal entry is the accounting encoding of that story.

Example pattern:

  • If cash increases → debit Cash

  • If cash decreases → credit Cash

  • If a liability increases → credit that liability

  • If an expense increases → debit that expense

  • If revenue increases → credit revenue

Your job (as a student) is to choose the correct accounts. LedgerLoom’s job is to verify you didn’t break the rules (balanced entries, consistent TB, proper closing).

Checkpoint A (Journal balances)

At the bottom of the Journal sheet:

  • Sum of Debit column

  • Sum of Credit column

They must match exactly.

Step 3 — TB_Unadjusted

Make a Trial Balance table with columns:

  • account

  • debits

  • credits

  • balance

How to compute balances (generic approach)

For each account:

  • total_debits = SUMIF(Journal!account == this_account, Journal!debit)

  • total_credits = SUMIF(Journal!account == this_account, Journal!credit)

  • balance = total_debits - total_credits

Then place the balance on the correct side:

  • If balance > 0 → show in Debit column

  • If balance < 0 → show ABS(balance) in Credit column

Checkpoint B (TB balances)

Total Debits in TB = Total Credits in TB.

If not, your journal is wrong.

Step 4 — Adjustments + TB_Adjusted (Chapter 3)

Create an Adjustments tab with the same columns as Journal:

  • date, entry_id, description, account, debit, credit

You will add adjusting entries here (accruals/deferrals/estimates).

Then compute TB_Adjusted by combining:

Journal totals + Adjustments totals.

Checkpoint C:

Adjusted TB Debits = Adjusted TB Credits.

Step 5 — Closing + TB_PostClose (Chapter 4)

Closing entries “reset” temporary accounts:

  • Revenue → closed to Retained Earnings

  • Expenses → closed to Retained Earnings

  • Dividends/Draws → closed to Retained Earnings

Create a Closing tab (same columns again).

Then compute TB_PostClose:

Adjusted TB + Closing entries.

Checkpoint D (the big invariant):

Post-close TB contains ONLY balance sheet accounts:

  • Assets, Liabilities, Equity (including Retained Earnings)

  • No Revenue, no Expenses, no Dividends/Draws

If you still see Revenue/Expense accounts on the post-close TB, closing is incomplete.

Where LedgerLoom fits

Once you can produce these tables manually, LedgerLoom becomes simple:

  • You supply the canonical CSV inputs

  • LedgerLoom produces canonical artifacts (entries, TBs, closing, post-close TB)

  • LedgerLoom verifies invariants you may accidentally break in a spreadsheet

Next: run the runnable project

Go to Student Quick Start (Linux, Windows, macOS) and run the exact same dataset through LedgerLoom.