Modern accounting (receipts, billings, pdf storage ...) toolchain and managed service. Making accounting easy and always balance.
- 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
balanc.config({
domain: 'your-company.com',
})
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)
const receivables = await balanc.getReceivables({
from: '[email protected]',
to: 'user-123',
})
const invoiceUrl = await balanc.billingUrl({
from: '[email protected]',
to: 'user-123',
})
// [{url, paidAt}]
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
- 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