Use when working with the Grist double-entry accounting system - recording transactions, entering bills, tracking vendors, querying account balances, or generating financial reports
Grist Double-Entry Accounting System
Overview
A complete double-entry accounting system for sole proprietorship service businesses. Every transaction creates balanced journal entries (debits = credits). Account balances roll up through parent-child hierarchy.
# Pay $50 for office supplies from checkingtransaction=add_records("Transactions",[{"Date":"2026-01-03","Description":"Office supplies","Status":"Cleared"}])add_records("TransactionLines",[{"Transaction":txn_id,"Account":office_supplies_id,"Debit":50},{"Transaction":txn_id,"Account":checking_id,"Credit":50}])
Enter a Bill (Accounts Payable)
Create Bill record with Vendor, BillDate, DueDate
Add BillLines with Item/Account and Amount
Create Transaction: Debit expense accounts, Credit AP
Link Bill.EntryTransaction to the transaction
# $150 electric bill from vendorbill=add_records("Bills",[{"Vendor":vendor_id,"BillDate":"2026-01-03","DueDate":"2026-02-02","Status":"Open"}])add_records("BillLines",[{"Bill":bill_id,"Account":utilities_id,"Description":"January electric","Amount":150}])# Journal entrytxn=add_records("Transactions",[{"Date":"2026-01-03","Description":"Electric Co - January"}])add_records("TransactionLines",[{"Transaction":txn_id,"Account":utilities_id,"Debit":150},{"Transaction":txn_id,"Account":ap_id,"Credit":150}])# Link bill to transactionupdate_records("Bills",[{"id":bill_id,"fields":{"EntryTransaction":txn_id}}])
Pay a Bill
# Pay $150 billtxn=add_records("Transactions",[{"Date":"2026-01-15","Description":"Payment - Electric Co","Reference":"Check #1001"}])add_records("TransactionLines",[{"Transaction":txn_id,"Account":ap_id,"Debit":150},{"Transaction":txn_id,"Account":checking_id,"Credit":150}])add_records("BillPayments",[{"Bill":bill_id,"Transaction":txn_id,"Amount":150,"PaymentDate":"2026-01-15"}])# Bill.Status auto-updates based on AmountDue formula
Owner Reimbursement
When owner pays business expense personally:
# Debit expense, Credit "Due to Owner" (liability 2203)add_records("TransactionLines",[{"Transaction":txn_id,"Account":expense_id,"Debit":50},{"Transaction":txn_id,"Account":due_to_owner_id,"Credit":50}])
When business reimburses owner:
# Debit "Due to Owner", Credit Checkingadd_records("TransactionLines",[{"Transaction":txn_id,"Account":due_to_owner_id,"Debit":50},{"Transaction":txn_id,"Account":checking_id,"Credit":50}])
Querying Data
Get Account Balances
# All accounts with balancessql_query("SELECT Code, Name, Type, Balance FROM Accounts ORDER BY Code")# Cash accounts onlysql_query("SELECT Name, Balance FROM Accounts WHERE Parent = 1")# Parent 1 = Cash# Total by account typesql_query("SELECT Type, SUM(Balance) FROM Accounts WHERE Parent IS NULL GROUP BY Type")
Get Unpaid Bills
sql_query("""
SELECT v.Name, b.BillNumber, b.DueDate, b.AmountDue
FROM Bills b
JOIN Vendors v ON b.Vendor = v.id
WHERE b.Status IN ('Open', 'Partial')
ORDER BY b.DueDate
""")
Transaction History for Account
sql_query("""
SELECT t.Date, t.Description, tl.Debit, tl.Credit
FROM TransactionLines tl
JOIN Transactions t ON tl.Transaction = t.id
WHERE tl.Account = ?
ORDER BY t.Date DESC
""",account_id)
Key Account Codes
Code
Name
Use For
1001
Checking Account
Primary bank account
2000
Accounts Payable
Bills owed to vendors
2203
Due to Owner
Owner reimbursements
3002
Owner's Draws
Money withdrawn by owner
4001
Service Revenue
Primary income
Validation Rules
Transactions must balance: SUM(Debit) = SUM(Credit)
Each line has Debit OR Credit, not both
Bills need at least one BillLine
BillPayments cannot exceed AmountDue
Formula Columns (Auto-Calculated)
Table.Column
Formula
Accounts.Balance
OwnBalance + ChildrenBalance
Transactions.IsBalanced
Sum debits = Sum credits
Bills.Amount
Sum of BillLines.Amount
Bills.AmountDue
Amount - AmountPaid
Vendors.Balance
Sum of unpaid bills
Common Mistakes
Mistake
Fix
Transaction not balanced
Ensure debits = credits before saving
Wrong debit/credit direction
Assets/Expenses increase with debit; Liabilities/Equity/Income increase with credit
Posting to parent account
Post to leaf accounts (1001 Checking, not 1000 Cash)
Forgetting AP entry for bills
Bills need both the expense entry AND the AP credit