ledgerstack-core
v0.1.2
Published
LedgerStack Core: reusable double-entry accounting engine for Node.js backends.
Downloads
305
Maintainers
Readme
LedgerStack Core
A reusable Node.js accounting engine with multi-company support, optional multi-tenant mode, cached balances, worker-driven recalculation, and reporting through a clean public API.
Documentation: https://akram-ashraf.github.io/ledgerstack-core-public/
Install
npm install ledgerstack-coreInit
import { initAccounts } from "ledgerstack-core";
await initAccounts({
adapter,
tenant: true,
worker: true,
autoMigrate: false,
});Migrate
import { migrate } from "ledgerstack-core";
await migrate();Create Account
import {
createCompany,
createYear,
setActiveYear,
createGroup,
createAccount,
} from "ledgerstack-core";
const company = await createCompany(null, "Demo Company");
const year = await createYear(company.id, "2026-04-01", "2027-03-31");
await setActiveYear(company.id, year.id);
const assets = await createGroup(company.id, {
name: "Assets",
parent_id: null,
type: "ASSET",
nature: "DEBIT",
position: 1,
});
const cash = await createAccount(company.id, {
code: "1000",
name: "Cash",
group_id: assets.id,
opening_debit: 0,
opening_credit: 0,
is_active: true,
is_system: false,
});Create Voucher
import { createVoucher } from "ledgerstack-core";
await createVoucher({
company_id: company.id,
year_id: year.id,
reference_id: "JV-0001",
voucher_type: "JOURNAL",
date: "2026-04-01",
narration: "Initial capital",
entries: [
{ account_id: cash.id, debit: 1000, credit: 0 },
{ account_id: capitalId, debit: 0, credit: 1000 },
],
});Run Worker
import { processJobs } from "ledgerstack-core";
await processJobs();Get Report
import { getTrialBalance, getBalanceSheet, getProfitLoss } from "ledgerstack-core";
const trialBalance = await getTrialBalance(company.id);
const balanceSheet = await getBalanceSheet(company.id);
const profitLoss = await getProfitLoss(company.id);Module Docs
- Introduction
- Init
- Adapter
- Accounts
- Vouchers
- Balance
- Cache
- Reports
- Worker
- Year
- Tenant
- Audit
- Currency
- Cost Center
- API
Notes
- initialize before using any engine function
- run migrations before inserting business data
- process worker jobs after voucher changes so cache-backed reports stay current
- reports should rely on cached balances instead of recalculating totals from entries
