Simple, ergonomic library for money arithmetic, currency conversion and tax calculations
Project description
evenmoney
Простая, удобная библиотека для работы с деньгами на Python.
- Нет зависимостей — только стандартная библиотека
- Конвертация валют — 4 бесплатных API, автоматический fallback + офлайн-кеш
- Налоги — UA, PL, DE, CZ, US, GB
- Точная арифметика —
Decimalпод капотом, без ошибок float
Установка
pip install evenmoney
# или напрямую из репозитория:
pip install git+https://github.com/you/evenmoney
Быстрый старт
from evenmoney import Money, tax
# Создание
price = Money(990, "UAH")
price = Money("990.50", "UAH") # строка — без ошибок float
# Конвертация по актуальному курсу
usd = price.convert("USD") # → Money(26.xx, "USD")
eur = price.convert("EUR") # → Money(23.xx, "EUR")
# Форматирование
price.format() # → "990,00 ₴"
usd.format() # → "$26.13"
price.format(symbol=False) # → "990,00"
price.format(decimals=0) # → "990 ₴"
# Курс
price.rate("USD") # → Decimal("0.027...")
Арифметика
a = Money(1000, "UAH")
b = Money(500, "UAH")
a + b # → Money(1500, "UAH")
a - b # → Money(500, "UAH")
a * 1.2 # → Money(1200, "UAH")
a / 4 # → Money(250, "UAH")
a.ratio(b) # → Decimal("2.0000")
-a # → Money(-1000, "UAH")
abs(-a) # → Money(1000, "UAH")
# Сравнение
a > b # → True
a == Money(1000, "UAH") # → True
# Разбивка на части
a.split(70, 30) # → [Money(700, "UAH"), Money(300, "UAH")]
a.split(1, 1) # → [Money(500, "UAH"), Money(500, "UAH")]
# Авто-конвертация разных валют
Money(100, "USD") + Money(100, "EUR") # конвертирует EUR → USD автоматически
НДС
from evenmoney import tax
tax.vat(1000, rate=20) # → 200.0 (сумма НДС)
tax.vat(1200, rate=20, inclusive=True) # → 200.0 (НДС включён в цену)
tax.add_vat(1000, rate=20) # → 1200.0 (цена + НДС)
tax.remove_vat(1200, rate=20) # → 1000.0 (цена без НДС)
tax.reverse_vat(200, rate=20) # → 1000.0 (база по сумме НДС)
# Полный расклад
r = tax.vat_full(1000, rate=20)
r.base # 1000.0
r.vat # 200.0
r.total # 1200.0
Подоходный налог
# Украина (ежемесячная зарплата)
r = tax.income(50_000, country="UA")
print(r)
# IncomeResult [Ukraine]
# Gross: 50 000,00 UAH
# Income tax: 9 000,00 UAH
# Military levy: 750,00 UAH
# ─────────────────────────────────────
# Net: 40 250,00 UAH
# Effective rate: 19.5%
# Employer cost: 61 000,00 UAH
# Польша
tax.income(8_000, country="PL")
# Германия
tax.income(5_000, country="DE")
# США (федеральный)
tax.income(7_000, country="US")
# Годовая зарплата
tax.income(600_000, country="UA", annual=True)
# Доступные страны
tax.supported_countries() # ['UA', 'PL', 'DE', 'CZ', 'US', 'GB']
Прочие утилиты
tax.margin(1200, 1000) # → 16.67 (маржа %)
tax.markup(1000, margin_pct=20) # → 1250.0 (цена при марже 20%)
tax.discount(1000, 15) # → 850.0 (цена со скидкой 15%)
Offline / кеш
Курсы валют автоматически кешируются в ~/.evenmoney_rates.json на 4 часа.
При отсутствии интернета используются последние сохранённые курсы.
Источники курсов
Автоматический перебор при ошибке:
- fawazahmed0/currency-api — CDN GitHub, ~170 валют, обновляется ежедневно
- Frankfurter (ЕЦБ) — официальные курсы, ~33 валюты
- open.er-api.com — бесплатный, без ключа, ~160 валют
- bank.gov.ua (НБУ) — официальные курсы гривны
Лицензия
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evenmoney-1.0.0.tar.gz.
File metadata
- Download URL: evenmoney-1.0.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b60ef0b04dffa7371b96e0f1bbde7fe41e75c4b7c9309fa1b582506373b06f23
|
|
| MD5 |
8dd1134ff2c45d7cc973694cf8a29acf
|
|
| BLAKE2b-256 |
a27e69859473bba6c0320d34cfd388297bbc95ea2e580faa74a4eb329633ead8
|
File details
Details for the file evenmoney-1.0.0-py3-none-any.whl.
File metadata
- Download URL: evenmoney-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1ae0321f49d7b6d465e56bf99ee566cdb00f5cf84d4921bc04b4ae316a4f4c6
|
|
| MD5 |
a635d5969f26b02f28184c842c9b7e0c
|
|
| BLAKE2b-256 |
917f1dc5b3089f05a365f8884511cf0eb8dd62a0dcf4290a91826a0986698960
|