How Baant does the maths.
Splitting money sounds simple until a bill does not divide evenly, a rate changes, or six people owe each other in four currencies. This page explains each rule with real figures, so you can check them with a calculator.
1. Money is counted in whole paise
Baant never stores money as a decimal number that a computer might round badly. ₹100 is kept as 10,000 paise, $250 as 25,000 cents and ¥1,000 as 1,000 yen, using each currency’s own number of decimals.
When a bill does not divide evenly, the leftover paise go to the people whose exact share was closest to the next paisa. When there is a tie, the order is drawn from the expense itself, so the same person does not always pay the extra.
₹100.00 split three ways
- Person A₹33.34
- Person B₹33.33
- Person C₹33.33
- Total₹100.00
2. Exchange rates are frozen when you save
A foreign expense keeps its original amount and currency for good. When you save it, Baant picks a rate in this order and writes down where it came from and its date:
- Trip rate. One rate the group agreed for a currency, used for every expense in it.
- Card statement. What your bank actually charged in rupees. Baant divides to find the exact rate.
- Typed rate. Any rate you enter, up to 18 decimal places.
- Reference rate. The European Central Bank rate for the expense date, for about 30 major currencies, fetched when you are online.
- Last saved rate. Offline, the newest rate Baant has seen, marked provisional until someone keeps or replaces it.
- Rate needed. Nothing available. The expense is saved and stays out of the balances until a rate is added.
That rate is never recalculated on its own. If you want a different one, edit the expense and choose it; the change is recorded with the old and new figures.
Museum and train tickets
- Original€400.00
- Rate× 103
- In the group’s rupees₹41,200.00
Each person’s share is worked out from the same exact fractions in both currencies, so the rupee shares add up to the rupee total.
3. Your balance is what you paid minus your share
Add up what each person paid and what each person’s shares came to, in the group’s currency. The difference is their balance: positive means others owe them, negative means they owe. Payments move balances towards zero. Across the whole group the balances always add up to exactly zero.
| Sample trip | Paid | Share | Balance |
|---|---|---|---|
| Deepak | ₹45,000.00 | ₹33,977.36 | gets back ₹11,022.64 |
| Rahul | ₹22,000.00 | ₹32,193.87 | owes ₹10,193.87 |
| Amit | ₹41,200.00 | ₹29,368.18 | gets back ₹11,831.82 |
| John | ₹21,240.00 | ₹34,010.39 | owes ₹12,770.39 |
| Sarah | ₹21,600.00 | ₹21,490.20 | gets back ₹109.80 |
4. Settling in the fewest payments
Paying back every debt as it arose would take 10 payments on the sample trip. Baant looks for groups of people whose balances add up to zero, because each such group can settle on its own. For groups of up to 15 people with something to settle it tries every combination and finds the true minimum; for larger groups it pairs the largest debts with the largest credits.
Fewest international payments first settles inside each country, then sends one payment per country that owes, so fewer payments cross a border and pay conversion fees.
Only between people who shared keeps payments between people who split at least one expense. No simplification settles each pair’s debts exactly as they stand.
Fewest international payments
- John to Amit₹12,660.59
- John to Sarah₹109.80
- Rahul to Deepak₹10,193.87
- Amit to Deepak₹828.77
4 payments instead of 10; the fewest possible is 4.
5. A payment is only complete when both sides agree
Opening a UPI app proves nothing, so Baant never marks a payment paid on its own. Each payment moves through these states, and every step is recorded with who did it and when:
- Initiated
- The payer started a payment, for example by opening a UPI app.
- Pending confirmation
- The payer says it went through. It already counts in balances.
- Completed
- The person paid confirmed the money arrived.
- Rejected
- The person paid says it did not arrive. It stops counting.
- Cancelled
- The payer withdrew it before it was confirmed.
- Disputed
- Either side questioned it. It is set aside until resolved.
6. Every change is chained to the last
Each group is a list of changes: added, edited, voided, paid, confirmed. Nothing is ever overwritten. Each change carries a SHA-256 fingerprint of the one before it, so changing or removing an old entry breaks every fingerprint after it. Baant checks the whole chain every time it opens a group and refuses to use a broken one.
The balances you see are worked out fresh from that list, the same way on every device. That is also what makes offline use safe: a change made without signal is just another entry waiting at the end of the list.
7. Where your data lives
On the web, groups are kept in your browser’s own storage. On the phone apps, they are kept in a database on the phone. Nothing is sent to a Baant server. To use the same groups on another device, export a backup or share the group as a link, and open it there.