#applications #yaml #refund

app minicount

A small refund application

4 releases

0.2.2 Apr 19, 2024
0.2.1 Apr 18, 2024
0.2.0 Apr 18, 2024
0.1.0 Apr 18, 2024

#76 in #yaml

Download history 115/week @ 2024-04-12 156/week @ 2024-04-19

271 downloads per month

AGPL-3.0-or-later

18KB
410 lines

Minicount, a small refund application

Minicount is a console-based, Libre Software clone of Tricount application.

It's goal is to minimize the number of repayments in a group of people in a Keep It Simple Stupid way: no mobile app, no database, no server.

Describe in a yaml file your expense and let minicount outputs the details.

Check example.yml file to understand the syntax and make your own.

Invocation

Tricount basically transform a yaml file like this:

$cat example.yml
# In this example, we have 3 people: Alice, Bob and Charly
---
# Alice paid a pizza for Bob (and for herself)
- who: Alice
  price: 35
  what: pizza
  for:
      - Alice
      - Bob
# Alice paid a restaurant to eveybody, no need to add all names
- who: Alice
  price: 100
  what: sunday's restaurant
# Charly paid some books for Bob
- who: Charly
  price: 53
  what: books
  for: [Bob]
# Bob paid ice creams to Charly and Alice
- who: Bob
  price: 35
  what: ice creams
  for: [Alice, Charly]

and transform it into text report you can send to your friends:

$ minicount example.yml

# Bills
- Alice paid 35.00 (pizza for Alice, Bob)
- Alice paid 100.00 (sunday's restaurant for everybody)
- Charly paid 53.00 (books for Bob)
- Bob paid 35.00 (ice creams for Alice, Charly)

# Balances
- Bob: +68.83
- Charly: -2.17
- Alice: -66.67

# Refunds
- Bob pays 66.67 to Alice
- Bob pays 2.17 to Charly

Method

A full explanation is available in sources (see src/main.rs).

I got the same results as Tricount application for a complex example so I suppose that's the same algorithm.

Install instructions

$ cargo install minicount

Build instructions

You will need to install Rustlang and then build the project:

$ cargo build --release

You will then find the program in target/release/minicount.

License

This whole project is licensed under GNU Affero General Public License v3 (AGPL-3.0).

The GNU Affero General Public License can be found at https://www.gnu.org/licenses/agpl.html.

For an overview of AGPL-3.0, check tldrlegal.

Dependencies

~1–1.6MB
~38K SLoC