AccuLedger
Pro

A modern double-entry accounting engine built from first principles on the VILT stack. AccuLedger Pro enforces GAAP-compliant ledger mechanics while delivering the kind of intuitive interface that non-accountants can actually use.

● ACTIVE DEVELOPMENT VILT Stack GAAP Double-Entry
PROJECT VITALS
Started 2024
Status Active Development
Stack Vue · Inertia · Laravel · Tailwind
Database MySQL 8 / Eloquent ORM
Testing Pest · PHPUnit
Accounting Std GAAP / IFRS-adjacent
Phase 2 of 4
Modules Done 5 of 8
Dr
Every Debit
has a corresponding Credit
=
The Equation
Assets = Liabilities + Equity
Cr
Every Credit
has a corresponding Debit

Module Register

MOD-01

Chart of Accounts

COMPLETE

Hierarchical CoA with account types (Asset, Liability, Equity, Income, Expense), sub-account grouping, and opening balance import.

MOD-02

Journal Entry Engine

COMPLETE

Double-entry posting with Dr/Cr balance enforcement, reference numbering, period locking, and full audit trail on every line.

MOD-03

Trial Balance

COMPLETE

Period-selectable trial balance with opening/movement/closing columns, account-level drill-down, and PDF/CSV export.

MOD-04

Profit & Loss

COMPLETE

GAAP-formatted income statement with gross profit, EBITDA, and net profit lines. Comparative prior-period column included.

MOD-05

Balance Sheet

COMPLETE

Classified balance sheet (current/non-current) with automatic retained earnings roll-forward and net asset reconciliation.

MOD-06

Bank Reconciliation

IN PROGRESS

Statement import via CSV/OFX, auto-matching on amount and date, unreconciled item ageing, and reconciliation lock-off.

MOD-07

Accounts Receivable

IN PROGRESS

Customer invoicing, credit notes, receipt allocation, ageing schedule, and statement generation. VAT / sales-tax aware.

MOD-08

Multi-Currency

PLANNED

Transaction-level currency capture with live FX rates, realised/unrealised gain-loss posting, and base-currency reporting.

Schema Design

Every table exists to enforce an accounting invariant. The schema is the contract between the application and GAAP.

KEY INVARIANTS
SUM(dr lines) = SUM(cr lines) per entry
No posting to a locked period
account.type drives normal balance
All amounts stored as integer minor units
CORE TABLES MySQL 8
TABLE KEY COLUMNS
accounts id, code, name, type, parent_id, currency, is_active
journal_entries id, reference, date, description, currency, period_id, posted_by
journal_lines id, entry_id, account_id, type(dr/cr), amount, memo
periods id, name, start_date, end_date, is_locked
currencies id, code, name, symbol, rate, is_base
bank_statements id, account_id, date, amount, description, matched_line_id
JournalEntry.php — balance guard PHP 8.3
protected static function booted(): void
{
    static::creating(function (JournalEntry $entry) {
        $dr = $entry->lines->where('type','debit')->sum('amount');
        $cr = $entry->lines->where('type','credit')->sum('amount');

        if ($dr !== $cr) {
            throw new UnbalancedEntryException(
                'Dr/Cr must be equal — GAAP invariance violated.'
            );
        }
    });
}

Architecture Ledger

Every technical choice has a reason (debit) and a consequence (credit).

01
DECISION

Eloquent ORM over raw SQL

RATIONALE

Relationships between entries, lines, and accounts are naturally expressed as Eloquent associations. The ORM enforces consistency without sacrificing query clarity.

02
DECISION

Inertia.js over a separate SPA

RATIONALE

Financial forms need server-side validation authoritative over the client. Inertia keeps validation on the Laravel layer while delivering a seamless navigation experience.

03
DECISION

Money PHP for all arithmetic

RATIONALE

Floating-point arithmetic is unsuitable for financial calculation. Money PHP enforces integer-based minor-unit storage and prevents rounding errors that would break the Dr = Cr invariance.

04
DECISION

Period locking at the model layer

RATIONALE

Closed accounting periods must be immutable. A locked period is enforced via a Laravel global scope that prevents any new journal lines being posted into it.

Build Plan

Phase 1
✓ Done

GL Core

  • Chart of Accounts
  • Journal Engine
  • Trial Balance
  • P&L
  • Balance Sheet
Phase 2
⟳ Active

Cash & AR

  • Bank Reconciliation
  • Accounts Receivable
  • Customer Portal
Phase 3
— Planned

AP & Multi-CCY

  • Accounts Payable
  • Multi-Currency
  • FX Revaluation
Phase 4
— Planned

Reporting Suite

  • Management Pack
  • Budget vs Actual
  • Cash Flow Statement