expense: base change converts every amount (bare, currencied, settlement)

a settled debt stays settled across a base change (invariant)

group splitsheet expense/base-change.spec.ts

👥 People

Alice @alice
sendsAlice runs /newsplit @bob
👥 Group chat
Alice
/newsplit @bob
Hello! I’m @splitsheetbot, here to help you split bills with friends. — show full message
Hello! I’m @splitsheetbot, here to help you split bills with friends.
I use something called a Splitsheet—a dynamic message that keeps track of all expenses and debts. Below, you’ll find your first Splitsheet.

Here’s how to get started:
1. Join the Splitsheet by clicking the 👥⁠➕ button (or reply with add @​username)
2. Reply to the Splitsheet with a description of your expense
3. Pin the Splitsheet for quick access

Examples of messages:
- groceries 50 (sender paid, and the cost is split evenly among all members)
- bought coffee for Emma 15 (sender paid, and only Emma owes)
- John bought concert tickets for me and Sarah, 40 each (John spent 80, and both Sarah and you owe)

How to edit expenses:
- Edit your own message
- Reply to your message with the changes
- Reply to your message requesting deletion

Adding expenses is free. One payment shows who owes whom, for the whole group, forever.

When you're ready to start a new Splitsheet, use the /newsplit command. You can mention members to add them immediately: /newsplit @​alice @​bob
If you have any questions or suggestions, feel free to contact @splitsheet_help_bot
🌐
📋 Splitsheet

👥 Alice, @bob

Your expenses will appear here

↩️ Reply to add an expense. Or tap here
👤➕More •••
🛡️ Admin log channel
📋 #splitsheet_created
By: Alice
Sheet: 344111d0-cb54-4460-aaee-1111d540441b

👤 #member_joined
Name: Alice
Sheet: 344111d0-cb54-4460-aaee-1111d540441b

👤 #member_joined
Name: bob
Sheet: 344111d0-cb54-4460-aaee-1111d540441b
viaWebApp.setCurrencyAlice sets the base currency to USD
👥 Group chat
Alice
/newsplit @bob
Hello! I’m @splitsheetbot, here to help you split bills with friends. — show full message
Hello! I’m @splitsheetbot, here to help you split bills with friends.
I use something called a Splitsheet—a dynamic message that keeps track of all expenses and debts. Below, you’ll find your first Splitsheet.

Here’s how to get started:
1. Join the Splitsheet by clicking the 👥⁠➕ button (or reply with add @​username)
2. Reply to the Splitsheet with a description of your expense
3. Pin the Splitsheet for quick access

Examples of messages:
- groceries 50 (sender paid, and the cost is split evenly among all members)
- bought coffee for Emma 15 (sender paid, and only Emma owes)
- John bought concert tickets for me and Sarah, 40 each (John spent 80, and both Sarah and you owe)

How to edit expenses:
- Edit your own message
- Reply to your message with the changes
- Reply to your message requesting deletion

Adding expenses is free. One payment shows who owes whom, for the whole group, forever.

When you're ready to start a new Splitsheet, use the /newsplit command. You can mention members to add them immediately: /newsplit @​alice @​bob
If you have any questions or suggestions, feel free to contact @splitsheet_help_bot
🌐
📋 Splitsheet

👥 Alice, @bob

Your expenses will appear here

↩️ Reply to add an expense. Or tap here
👤➕More •••
📱 Mini App
Mini App
repliesAlice replies to the splitsheet: “dinner 100”
👥 Group chat
Alice
/newsplit @bob
Hello! I’m @splitsheetbot, here to help you split bills with friends. — show full message
Hello! I’m @splitsheetbot, here to help you split bills with friends.
I use something called a Splitsheet—a dynamic message that keeps track of all expenses and debts. Below, you’ll find your first Splitsheet.

Here’s how to get started:
1. Join the Splitsheet by clicking the 👥⁠➕ button (or reply with add @​username)
2. Reply to the Splitsheet with a description of your expense
3. Pin the Splitsheet for quick access

Examples of messages:
- groceries 50 (sender paid, and the cost is split evenly among all members)
- bought coffee for Emma 15 (sender paid, and only Emma owes)
- John bought concert tickets for me and Sarah, 40 each (John spent 80, and both Sarah and you owe)

How to edit expenses:
- Edit your own message
- Reply to your message with the changes
- Reply to your message requesting deletion

Adding expenses is free. One payment shows who owes whom, for the whole group, forever.

When you're ready to start a new Splitsheet, use the /newsplit command. You can mention members to add them immediately: /newsplit @​alice @​bob
If you have any questions or suggestions, feel free to contact @splitsheet_help_bot
🌐
📋 Splitsheet

💰 $100.00 • 👥 Alice, @bob

Jun 19, 2026
Dinner ― $100.00 • Alice for all

🔒 All debts are already calculated. Unlock to see them

↩️ Reply to add an expense. Or tap here
👤➕More •••
🔓 See the debts
Alice
📋 Splitsheet 💰 $100.00 • 👥 Alice, @bob Jun 19, 2026 Dinner ― $100.00 • Alice…
dinner 100
✍️
viaWebApp.settleBob paid Alice back 50 · via Mini App
  • after Bob settles his 50 Alice is square (balance 0)
👥 Group chat
Alice
/newsplit @bob
Hello! I’m @splitsheetbot, here to help you split bills with friends. — show full message
Hello! I’m @splitsheetbot, here to help you split bills with friends.
I use something called a Splitsheet—a dynamic message that keeps track of all expenses and debts. Below, you’ll find your first Splitsheet.

Here’s how to get started:
1. Join the Splitsheet by clicking the 👥⁠➕ button (or reply with add @​username)
2. Reply to the Splitsheet with a description of your expense
3. Pin the Splitsheet for quick access

Examples of messages:
- groceries 50 (sender paid, and the cost is split evenly among all members)
- bought coffee for Emma 15 (sender paid, and only Emma owes)
- John bought concert tickets for me and Sarah, 40 each (John spent 80, and both Sarah and you owe)

How to edit expenses:
- Edit your own message
- Reply to your message with the changes
- Reply to your message requesting deletion

Adding expenses is free. One payment shows who owes whom, for the whole group, forever.

When you're ready to start a new Splitsheet, use the /newsplit command. You can mention members to add them immediately: /newsplit @​alice @​bob
If you have any questions or suggestions, feel free to contact @splitsheet_help_bot
🌐
📋 Splitsheet

💰 $100.00 • 👥 Alice, @bob

Jun 19, 2026
Dinner ― $100.00 • Alice for all

🔒 All debts are already calculated. Unlock to see them

↩️ Reply to add an expense. Or tap here
👤➕More •••
🔓 See the debts
Alice
📋 Splitsheet 💰 $100.00 • 👥 Alice, @bob Jun 19, 2026 Dinner ― $100.00 • Alice…
dinner 100
✍️
📱 Mini App
Mini App
viaWebApp.setCurrencyAlice sets the base currency to EUR
  • changing the base to EUR leaves Alice at 0 (no debt created)
👥 Group chat
Alice
/newsplit @bob
Hello! I’m @splitsheetbot, here to help you split bills with friends. — show full message
Hello! I’m @splitsheetbot, here to help you split bills with friends.
I use something called a Splitsheet—a dynamic message that keeps track of all expenses and debts. Below, you’ll find your first Splitsheet.

Here’s how to get started:
1. Join the Splitsheet by clicking the 👥⁠➕ button (or reply with add @​username)
2. Reply to the Splitsheet with a description of your expense
3. Pin the Splitsheet for quick access

Examples of messages:
- groceries 50 (sender paid, and the cost is split evenly among all members)
- bought coffee for Emma 15 (sender paid, and only Emma owes)
- John bought concert tickets for me and Sarah, 40 each (John spent 80, and both Sarah and you owe)

How to edit expenses:
- Edit your own message
- Reply to your message with the changes
- Reply to your message requesting deletion

Adding expenses is free. One payment shows who owes whom, for the whole group, forever.

When you're ready to start a new Splitsheet, use the /newsplit command. You can mention members to add them immediately: /newsplit @​alice @​bob
If you have any questions or suggestions, feel free to contact @splitsheet_help_bot
🌐
📋 Splitsheet

💰 85.80€ • 👥 Alice, @bob

Jun 19, 2026
Dinner ― $100.00 (≈85.8€) • Alice for all

🔒 All debts are already calculated. Unlock to see them

↩️ Reply to add an expense. Or tap here
👤➕More •••
🔓 See the debts
Alice
📋 Splitsheet 💰 85.80€ • 👥 Alice, @bob Jun 19, 2026 Dinner ― $100.00 (≈85.8€)…
dinner 100
✍️
📱 Mini App
Mini App