Skip to main content

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

Быстрый старт

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 часа. При отсутствии интернета используются последние сохранённые курсы.

Источники курсов

Автоматический перебор при ошибке:

  1. fawazahmed0/currency-api — CDN GitHub, ~170 валют, обновляется ежедневно
  2. Frankfurter (ЕЦБ) — официальные курсы, ~33 валюты
  3. open.er-api.com — бесплатный, без ключа, ~160 валют
  4. bank.gov.ua (НБУ) — официальные курсы гривны

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evenmoney-1.0.1.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evenmoney-1.0.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file evenmoney-1.0.1.tar.gz.

File metadata

  • Download URL: evenmoney-1.0.1.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for evenmoney-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ad588a0012df9381c23e90166c17438d725968f2a770feec4a03354c6aefb061
MD5 83158f0b73460a8c4ee5a18ef373ba89
BLAKE2b-256 a9e382a60eef3e786392dc6e20934b8c05e11ee510dc2103c81424003c8eefcb

See more details on using hashes here.

File details

Details for the file evenmoney-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: evenmoney-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for evenmoney-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 292fb5453aa6af52a4c850b7b28061e47747a48b1a3123da51f08769cf0990bd
MD5 25d8452cf7f383fd714f03be8052311f
BLAKE2b-256 117c639116d0b3f760fc6a1cd1b6d9c5de85360b0e5c4a5632eae1db6cd0e58c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page