Expense tracker & personal finance database schema

A local-first SQLite personal finance database: accounts, transactions in integer minor units, a nested category tree, per-period budgets with rollover, recurring rules, statement imports with auto-categorisation, receipts, and transfers modelled as a linked pair of legs.

Expense Tracker ER diagram

Expense tracker & personal finance database schema n1 n1 n1 n1 n1 n1 n1 n1 11 11 n1 n1 n1 n1 n1 n1 n1 n1 n1 accounts idINTEGER nameTEXT kindTEXT currency_codeTEXT opening_balance_m…INTEGER current_balance_m…INTEGER institutionTEXT is_closedBOOLEAN is_off_budgetBOOLEAN positionINTEGER created_atTIMESTAMP categories idINTEGER parent_idINTEGER nameTEXT kindTEXT iconTEXT is_archivedBOOLEAN positionINTEGER payees idINTEGER nameTEXT default_category_…INTEGER is_internalBOOLEAN transaction_countINTEGER transactions idINTEGER account_idINTEGER category_idINTEGER payee_idINTEGER transfer_idINTEGER recurring_rule_idINTEGER import_batch_idINTEGER posted_onDATE amount_minorINTEGER currency_codeTEXT kindTEXT descriptionTEXT notesTEXT is_clearedBOOLEAN is_reconciledBOOLEAN external_idTEXT import_hashTEXT created_atTIMESTAMP transfers idINTEGER from_transaction_…INTEGER to_transaction_idINTEGER from_amount_minorINTEGER to_amount_minorINTEGER exchange_rateREAL fee_minorINTEGER transferred_onDATE created_atTIMESTAMP budgets idINTEGER category_idINTEGER nameTEXT period_kindTEXT amount_minorINTEGER currency_codeTEXT rollover_enabledBOOLEAN starts_onDATE ends_onDATE budget_periods idINTEGER budget_idINTEGER period_startDATE period_endDATE allocated_minorINTEGER rolled_over_minorINTEGER spent_minorINTEGER is_closedBOOLEAN recurring_rules idINTEGER account_idINTEGER category_idINTEGER payee_idINTEGER nameTEXT amount_minorINTEGER frequencyTEXT day_of_monthINTEGER next_due_onDATE ends_onDATE auto_postBOOLEAN is_activeBOOLEAN import_batches idINTEGER account_idINTEGER sourceTEXT filenameTEXT row_countINTEGER imported_countINTEGER duplicate_countINTEGER period_startDATE period_endDATE imported_atTIMESTAMP import_rules idINTEGER match_fieldTEXT match_typeTEXT patternTEXT set_category_idINTEGER set_payee_idINTEGER priorityINTEGER is_enabledBOOLEAN match_countINTEGER receipts idINTEGER transaction_idINTEGER filenameTEXT mime_typeTEXT size_bytesINTEGER storage_pathTEXT image_dataBLOB ocr_textTEXT captured_atTIMESTAMP

Related database schemas