App simples para dividir despesas de uma festa entre participantes e gerar um plano mínimo de “quem paga quem” (≤ N−1 transferências).
Feito com Python, pandas e Streamlit.
- Editor de despesas inline (tabela editável).
- Formulário para inserir nova despesa (nome, valor e descrição opcional).
- Botão para limpar toda a lista.
- Cálculo da cota por pessoa e saldos (positivo = a receber, negativo = a pagar).
- Plano mínimo de transferências (algoritmo guloso: maior devedor ↔ maior credor).
- Exportação CSV em dois formatos:
- UTF-8 com vírgula (Google Sheets / Excel moderno).
- Excel pt-BR (ponto e vírgula como separador e vírgula decimal).
- Soma todas as despesas e calcula cota = total / nº participantes.
- Para cada pessoa, saldo = pago − cota (positivo = credor; negativo = devedor).
- Ordena credores e devedores e casa maior devedor com maior credor até zerar (≤ N−1 transferências).
- Quem não pagou nada também entra na divisão (marcado como
(sem_nome_i)se não houver lista explícita).
.
├─ app.py # App Streamlit (com main())
└─ requirements.txt # Dependências (streamlit, pandas)
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app.py- Use o template do Streamlit e aponte o arquivo principal para
app.py.
Colunas: pagador (obrigatório), valor (obrigatório), descricao (opcional).
Exemplo:
pagador,valor,descricao
Ana,180.00,mercado
Bruno,20.00,gelo
Ana,40.00,carvão
Carla,60.00,refri- CSV UTF-8 (vírgula) → Google Sheets / Excel recente.
- CSV p/ Excel (pt-BR) → Excel configurado em pt-BR (usa
;e vírgula decimal).
- Número de participantes inclui quem não pagou nada.
- Para evitar
(sem_nome_i), adapte para usar lista fixa de participantes.
- Arredondamento monetário com
Decimal(2 casas,ROUND_HALF_UP). - Despesas com
valor ≤ 0são ignoradas.
Função principal:
settle_min_transfers(num_participantes: int, despesas_df: pd.DataFrame) -> dictstreamlit>=1.36
pandas>=2.1
PRs são bem-vindos.
Este projeto é licenciado sob a MIT License.
Consulte o arquivo LICENSE para detalhes.