balanc
v0.2.2
Published
Modern accounting (receipts, billings, pdf storage ...) toolchain and managed service
Downloads
25
Maintainers
Readme
balanc
Modern accounting (receipts, billings, pdf storage ...) toolchain and managed service. Making accounting easy and always balance.
Why
- if you are using NoSQL, balanc can replace traditional lock and transaction required operations for orders, invoices, receives and payments
- if you are using SQL, balanc can solve the scale and storage problem
Demo
API
Setup config
balanc.config({
domain: 'your-company.com',
})
Record exchange and Receipt pdf
const exchange = await balanc.exchange({
from: '[email protected]',
to: 'user-123',
gives: [
{
quantity: 2, // two months implied by item string
item: 'Monthly Gym Membership',
price: 100, // sub-total price of 2 monthly Gym
// givenAt: new Date(),
},
],
takes: [
{
item: 'Cash',
price: 100,
},
],
// isPreview: true,
})
const pdfUrl = await balanc.receiptUrl(exchange)
Issue payment reminder
const receivables = await balanc.getReceivables({
from: '[email protected]',
to: 'user-123',
})
const invoiceUrl = await balanc.billingUrl({
from: '[email protected]',
to: 'user-123',
})
// [{url, paidAt}]
Access Accounts
const numbers = await balanc.getExchangeNumbers({
from: '[email protected]',
to: 'user-123',
})
const balance = await balanc.getBalance({
user: '[email protected]',
item: 'Cash',
})
should(balance).be.equal(100)
const account = await balanc.getAccount({
user: '[email protected]',
item: 'Cash',
})
should(account.balance).be.equal(100)
should(account.transfers.length).be.equal(1)
const excelUrl = balanc.accountExcelUrl({
user: '[email protected]',
item: 'Cash',
})
// url that access xlsx file
How
- Based on http://eddyy.com
- Record transfer as log and use job queue to resolve the transaction and locking problem
- Create balance record monthly and daily for fast read
- Inspired by https://dzone.com/articles/how-implement-robust-and