Partita Doppia

Partita Doppia

Simple small business bookkeeping

Double-entry books for small businesses. Invoices, bills, spend and receive money, transfers, manual journals, bank reconciliation, Xero-style tracking categories and the standard reports, in a Rails 8 app that runs on SQLite and needs nothing else.

Built to migrate easily from Xero.

Partita doppia is Italian for double-entry bookkeeping. Say par-TEE-tah DOHP-pyah.

What it does

  • Documents post to the ledgerInvoices and bills accrue and take payments. Expenses and deposits move money through a bank account, transfers between two, manual journals cover the rest. Each one carries line items, attachments and a history of who changed what.
  • Bank reconciliationA nightly SimpleFIN feed or uploaded CSV, OFX and QFX statements. Each line gets a ranked suggestion with a one-click OK, or match it, split it, categorise it, or pair it with its transfer. Bank rules do the repetitive ones. Every match is undoable.
  • Tracking categoriesUp to two active categories the way Xero does them, one option per category on any line, and a profit and loss broken out by option.
  • ReportsProfit and loss, balance sheet, trial balance, general ledger, receivables and payables aging, profit and loss by tracking category.
  • InvoicingNumbered invoices with a PDF, emailed to the customer with the PDF attached, recurring invoices, and a per-document activity log.
  • Xero import via APIPull the chart of accounts, tax rates, contacts, tracking categories, every invoice and bill with payments, spend and receive money, transfers and manual journals. Re-running updates in place. Xero's CSV exports upload as a fallback.
  • Passwordless sign-inEvery sign-in emails a six-digit code. An installation can instead trust an SSO hub's cookie.
  • Dark and light themesChosen per person, in a terminal-flavoured UI.

Screens

Dashboard: operating bank, receivables, payables and the latest ledger entries
DashboardOperating bank, receivables, payables and the latest ledger entries.
Bank reconciliation: suggestions with a one-click OK, split, categorise or transfer
ReconcileSuggestions with a one-click OK, or split, categorise or pair with a transfer.
Profit and loss broken out by a tracking category
P&L by trackingProfit and loss broken out by the options of a tracking category.

Stack

  • Ruby 3.4
  • Rails 8
  • SQLite
  • Solid Queue, Cache, Cable
  • Hotwire
  • Importmap, no build step
  • Postgres
  • Redis
  • Node
  • Sidekiq

One Ruby process, one SQLite file on a writable disk, and an SMTP account for login codes and invoices. Any host that runs a Rails app will do.

Quick start

$ git clone https://github.com/joelgaff/partita_doppia.git
$ cd partita_doppia
$ bin/setup                 # bundle, db:prepare, enables the pre-push hook
$ EDITOR=nano bin/rails credentials:edit
$ bin/rails server

Open the site. With nobody signed in yet it shows Set up your books: name the entity and the first person, confirm the email with a six-digit code, and you're in. The README covers credentials, Xero history and bank feeds.