Кто кому должен: как свести переводы к минимуму
Чтобы свести переводы к минимуму, не возвращайте долги по каждой трате. Посчитайте один итоговый баланс каждого: сколько заплатил минус его доля. Дальше должники переводят деньги тем, у кого баланс положительный, и переводов выходит не больше, чем участников минус один.
Почему по каждой трате выходит так много переводов
Возьмём поездку из статьи «Как поделить расходы в поездке». Четверо, четыре траты на 40 100 ₽, каждую оплатил кто-то один:
| Трата | Сумма | Платил | Делим |
|---|---|---|---|
| Квартира | 21 000 ₽ | Аня | по ночам: 6 000, 6 000, 6 000 и 3 000 ₽ у Гены |
| Бензин | 6 400 ₽ | Боря | на четверых, по 1 600 ₽ |
| Продукты | 5 200 ₽ | Вика | на четверых, по 1 300 ₽ |
| Ресторан | 7 500 ₽ | Гена | без Вики, по 2 500 ₽ |
Если каждый вернёт долг за каждую трату, получится 11 переводов: по три за квартиру, бензин и продукты и два за ресторан. Многие из них идут навстречу друг другу: Аня переводит Боре за бензин, а Боря Ане за квартиру.
Шаг 1. Взаимозачёт внутри каждой пары
Сначала сократим встречные долги. Если Боря должен Ане 6 000 ₽, а Аня Боре 1 600 ₽, достаточно одного перевода на 4 400 ₽.
| Пара | Встречные долги | После зачёта |
|---|---|---|
| Аня и Боря | Боря → Аня 6 000, Аня → Боря 1 600 | Боря → Аня 4 400 ₽ |
| Аня и Вика | Вика → Аня 6 000, Аня → Вика 1 300 | Вика → Аня 4 700 ₽ |
| Аня и Гена | Гена → Аня 3 000, Аня → Гена 2 500 | Гена → Аня 500 ₽ |
| Боря и Вика | Вика → Боря 1 600, Боря → Вика 1 300 | Вика → Боря 300 ₽ |
| Боря и Гена | Гена → Боря 1 600, Боря → Гена 2 500 | Боря → Гена 900 ₽ |
| Вика и Гена | Гена → Вика 1 300 | Гена → Вика 1 300 ₽ |
Осталось 6 переводов. Это уже лучше, но деньги всё ещё ходят по кругу: Боря получает от Вики 300 ₽ и сам переводит Гене 900 ₽.
Шаг 2. Итоговый баланс каждого
Сложим всё, что человек заплатил, и вычтем его долю во всех тратах:
| Заплатил | Доля | Баланс | |
|---|---|---|---|
| Аня | 21 000 ₽ | 11 400 ₽ | +9 600 ₽ |
| Боря | 6 400 ₽ | 11 400 ₽ | −5 000 ₽ |
| Вика | 5 200 ₽ | 8 900 ₽ | −3 700 ₽ |
| Гена | 7 500 ₽ | 8 400 ₽ | −900 ₽ |
Сумма балансов всегда равна нулю. Если не равна, где-то ошибка в доле или в сумме.
Шаг 3. Должники переводят тем, у кого плюс
Правило простое: самый крупный должник переводит самому крупному кредитору столько, сколько закрывает долг одного из них. Потом то же для оставшихся. В примере кредитор один, поэтому переводов три:
| Перевод | Сумма | Баланс после перевода |
|---|---|---|
| Боря → Аня | 5 000 ₽ | Аня +4 600, Боря 0 |
| Вика → Аня | 3 700 ₽ | Аня +900, Вика 0 |
| Гена → Аня | 900 ₽ | Аня 0, Гена 0 |
Каждый отдал ровно столько, сколько был должен в итоге. Боря при этом не переводит Гене за ресторан: этот долг уже учтён в его балансе.
Пример посложнее: пятеро и два кредитора
Пятеро снимали дачу. Балансы после всех трат: Олег +5 000 ₽, Ира +1 000 ₽, Петя −2 000 ₽, Маша −3 000 ₽, Коля −1 000 ₽.
| Шаг | Кто → кому | Сумма | Почему именно так | Остаток |
|---|---|---|---|---|
| 1 | Маша → Олег | 3 000 ₽ | самый крупный должник и самый крупный кредитор | Олег +2 000 |
| 2 | Петя → Олег | 2 000 ₽ | следующий должник, Олегу ещё должны 2 000 ₽ | Олег 0 |
| 3 | Коля → Ира | 1 000 ₽ | остались один должник и один кредитор | все по нулям |
Три перевода на пятерых. Участников с ненулевым балансом пять, значит, переводов не больше четырёх, и здесь хватило трёх.
Ограничения способа
- Переводов не больше, чем участников минус один. Каждый перевод обнуляет баланс хотя бы одного человека.
- Иногда можно ещё на один меньше. Если внутри компании есть подгруппа, балансы которой в сумме дают ноль, её можно рассчитать отдельно. Поиск такого варианта сложнее, а выигрыш обычно один перевод.
- Адресат перевода может удивить. После зачёта вы можете переводить деньги человеку, который за вас ничего не платил. Сумма, которую вы отдаёте, от этого не меняется.
Как это сделать в приложении
В группах Кешбэк Совета балансы и переводы считаются сами, тем же способом: самый крупный должник платит самому крупному кредитору. Записывайте траты по ходу дела, а в конце откройте долги группы: там сразу итоговые переводы. Когда перевели деньги, нажмите «Рассчитаться»: можно указать всю сумму или часть, и остаток пересчитается.
Траты в разных валютах приложение считает отдельно: долг в евро закрывается переводом в евро, без пересчёта по курсу.
Один общий счёт в ресторане проще разделить в калькуляторе, а про общие траты с соседями есть отдельный разбор: «Общие расходы с соседями по квартире».