MoneyBench Guide

What a loan really costs: the real annual rate, bank rounding, any currency and Ukrainian taxes

A bank advertises a nominal rate; what you pay is decided by fees, insurance and the dates of the payments. MoneyBench puts all of it into one number, the real annual rate, and shows every step of every calculation, in hryvnias or any other currency. For Ukraine it adds the NBU rate and taxes and tells you which article of which law each rate was read from and from what date it applies; for another country, ECB rates and your own tax rate on a deposit. This guide explains how it works and where its limits are.

By the fof.lol team · Updated · 11 min read

Open MoneyBench

Country and currency

Above the tabs there are two lists: the country and the currency of the calculations. The country decides which local rules the page offers.

  • Ukraine. The hryvnia by default, the official NBU rate, the Taxes tab (pay, sole traders, tax on interest) and tax on deposit interest by Ukrainian law: 18 % income tax and the 5 % military levy. You can still count in another currency the NBU quotes.
  • Another country. The loan, the deposit, the savings and the currencies are counted in your currency, with ECB rates by default. Nothing Ukrainian is assumed: the Taxes tab is hidden, because it counts by the Tax Code of Ukraine, and for another country a wrong number is worse than none. If you open its address, the page explains this and offers to switch to the Ukrainian rules. Tax on deposit interest is “No tax” or “My rate”.

On a first visit the page guesses the country: the Ukrainian version of the site, the Kyiv time zone or Ukrainian among the browser’s languages mean “Ukraine”, anything else “Another country”. The currency for another country comes from the browser’s first language: its region first (en-GB → GBP, de-AT → EUR), then the language itself (pl → PLN), and the US dollar when neither is known. The choice is kept in this browser and travels in a share link. When you switch the country, the page takes away what is Ukrainian (the hryvnia, the NBU rate, the Ukrainian deposit tax, which becomes “No tax”) or brings it back; the rest of your numbers stay.

The real annual rate

Take 100 000 ₴ for 12 months at 24 % a year with equal (annuity) payments. The payment is 9 455.96 ₴ and you overpay 13 471.53 ₴. Now add a one-off fee of 2 000 ₴: the nominal rate is still 24 %, the payment is the same, but you received only 98 000 ₴ and paid back the same amounts, so the overpayment is 15 471.53 ₴ and the yearly cost rises from 26.95 % to 32.00 %. That last figure is the real annual rate (РРПС in Ukrainian law, APR in the EU): the one rate at which everything you receive, discounted, equals everything you pay.

Σ received(k) / (1 + X)^t(k)  =  Σ paid(k) / (1 + X)^s(k)
t, s = days from the first day / 365

The equation has no closed form, so MoneyBench solves it numerically by Newton’s method: it starts from a guess and improves it with X ← X − f(X) / f′(X) until the step is below 10−13. After every run it checks convergence: the residual (the sum of discounted flows at the answer) must be below a millionth of the flows. If Newton’s method wanders off or the residual is too large, a bisection over −99.99 % … 10 000 % takes over; if even that finds no sign change, the page says the rate is unreliable instead of showing a number. The “How it is calculated” box shows the iterations, the method that finished and the residual.

Two details. The payments are put on real dates (the same day of each month, the last day of a short month), so the exponent is real days / 365; the same flows on a plain monthly step give the figure (1 + monthly IRR)^12 − 1, also shown. They differ by a few hundredths of a percent because months have different lengths. And the real rate includes the one-off fee, monthly fees and insurance, but not things outside the loan contract, such as the cost of a required current account.

Loan: payments, fees, early repayment

  • Annuity or differentiated. Annuity: the same payment every month, A = P·i / (1 − (1+i)^−n), where i is the annual rate / 12. Differentiated: the same principal part P / n every month plus interest on the falling balance, so the first payment is the largest.
  • Fees and insurance. A one-off fee (an amount and/or a percentage of the loan, paid on the first day and so reducing what you actually receive), a monthly fee (an amount and/or a percentage of the loan) and insurance (a percentage a year of the remaining balance, charged monthly). Each shows up in the schedule, the overpayment and the real rate.
  • Overpayment is everything you pay (payments, fees, insurance, the early-repayment fee) minus the loan.
  • Early repayment. Enter the payment number after which you repay, the amount and the bank’s fee for it. Choose whether the term shortens (the payment stays) or the payment falls (the term stays). The result shows the interest and the total you save, the months saved and the new payment.
  • Two offers side by side. Tick “Compare with a second offer”, fill in the second loan, and a table shows the first payment, the total paid, the overpayment, the interest, the fees and the real rate of both, marks the cheaper one and says by how much. If the terms differ, compare the real rate as well as the overpayment.
  • The schedule is a table (all payments, early repayment highlighted) and a chart by month, or by year for loans over five years. The PNG card carries the headline numbers and that chart; print or “Save as PDF” prints every formula open.

Deposit and tax on interest

Choose simple interest (added up and paid once, at the end), monthly capitalisation or quarterly capitalisation (the interest joins the amount and earns interest itself), and an optional top-up every month. The tax on the interest has three choices. “Ukraine: 18 % + 5 %” (only when Ukraine is chosen): the bank withholds income tax and the military levy every time interest is credited, each rounded on its own, at the rates in force on the date you give; interest on government bonds (ОВДП) is not taxed and is not what this tab calculates. “My rate”: one tax at your own percentage (to a thousandth), withheld the same way, from each interest credit, for a country where the rules differ. “No tax”: the interest is all yours.

The result is the final amount, the earned interest before and after tax, the effective yearly yield (the monthly IRR of everything you put in and took out, compounded over 12 months) and the real yield after inflation: (1 + yield) / (1 + inflation) − 1. The inflation is your number: the page does not look one up, because any forecast would be a guess dressed as a fact.

Savings and a goal

Compound interest with regular contributions: each month the balance earns rate / 12 and then the contribution is added (or before, if you pay in at the start of the month). Switch to “How much to save a month”, enter a goal and a term, and the page finds the contribution that reaches it, rounded up to the kopiyka or the cent: C = (Goal − P·(1+i)^n) · i / ((1+i)^n − 1). The chart splits each column into what you put in and what the interest earned, and the box also shows the final sum in today’s money, using your inflation figure. Tax on the interest is not taken off here; use the Deposit tab for that.

Currencies: NBU and ECB rates

  • The official NBU rate (bank.gov.ua) is what the Ukrainian tax rules use. The converter takes any pair through the hryvnia, today or on a date. The NBU publishes a rate for every calendar day, weekends included.
  • The receipts table. Add every receipt (date, currency, amount); the table finds the rate of each row, rounds the row to the kopiyka or the cent and adds the rows up. With the NBU rate it counts in hryvnias, which is how a Ukrainian sole trader counts foreign-currency income: at the NBU rate on the date it was received. With the ECB rates it counts in the currency of the calculations chosen above (or in euros if the ECB does not quote it), at the reference rate of each receipt’s date; on a weekend or holiday the last working day’s rate is used. Every row shows its own currency, and a row already in the table’s currency has the rate 1.
  • The chart shows a currency over a period. The NBU has an endpoint for a range of dates, but it sends no CORS header, so a web page may not read it; MoneyBench therefore asks the open per-day endpoint one day at a time (a long period is sampled, at most 120 requests) and keeps every answer, so a day is never fetched twice.
  • The ECB reference rates (through api.frankfurter.dev) cover other pairs, such as EUR/USD or GBP/PLN; they do not include the hryvnia. For another country they are the default source, and the NBU rate stays next to them for pairs with the hryvnia.
  • The currency of the calculations. Above the tabs you choose the currency in which the loan, the deposit and the savings are counted: the hryvnia by default for Ukraine, the currency your browser suggests for another country; the list has every currency the NBU or the ECB quotes. The arithmetic is the same, amounts are rounded to the cent. With Ukraine chosen and a currency other than the hryvnia, the page also shows the main result in hryvnias at the latest NBU rate kept in this browser.
  • Offline. Every rate is stored in this browser with its date. Without a connection the page shows the stored value and says so: “as of 16.10.2026, from the copy kept in this browser”. The only requests the page makes are these public GET requests with a currency code and a date; nothing of yours is sent.

Taxes: pay and sole traders

  • Salary. From gross to net: income tax (18 %) is taken from the gross less the tax social benefit (if you tick it and the pay is below its ceiling), the military levy (5 %) from the whole gross, and the employer pays the single contribution (22 %) on top, up to a ceiling of 20 minimum wages a month. From net to gross the page solves the same equations backwards and checks the result to the kopiyka. Only the basic benefit is counted, not the benefits for children.
  • Sole trader on the single tax. Choose the group, enter the income by quarter and see the single tax, the military levy, the contribution and what is left, the share of income taken, how much of the yearly income limit you have used, and the due dates. Groups 1 and 2 pay a fixed monthly amount (the highest a council may set unless you enter your own); group 3 pays a percentage of income (3 % with VAT, 5 % without) and 1 % military levy.
  • Tax on deposit interest: income tax and military levy, withheld by the bank.
  • Ukraine only. This tab is there when the country is “Ukraine”; for another country it is hidden (see “Country and currency”).
  • In another currency. Ukrainian taxes are counted in hryvnias. If the currency of the calculations is not the hryvnia, the amounts you type (pay, quarterly income, interest) are converted at the official NBU rate on the date of the rules, each rounded to the kopiyka; the results are in hryvnias, and the main one is also shown in your currency. For sole traders the exact rule is the rate on the date each payment was received: for several receipts use the table on the Currencies tab.

Next to every tax result is the line “Rules as of date”, the sources and a list of every value used, with the date it applies from and the article it was read from.

How a bank rounds

Banks do not carry fractions of a kopiyka. Every amount that is charged or paid (a month’s interest, a fee, an insurance charge, a payment) is rounded half-up to the kopiyka at the moment it is calculated, and the next month’s interest is computed from the rounded balance. The last payment takes whatever is left so that the balance ends at exactly zero, which is why the last payment of a schedule differs from the others by a few kopiykas. MoneyBench does exactly this and says so under each result. The bank’s own contract and schedule always win: some banks count interest by actual days in the month, others by a 30-day month, and a few kopiykas of difference are normal.

Where the tax rules come from

The rates, the minimum wage, the living minimum and the income limits are not written from memory. On 16 October 2026 each value was read from the text of the law on zakon.rada.gov.ua and stored in the file money/rules.js with the date it applies from and a reference: the Tax Code (edition of 17 September 2026: article 167.1 for the 18 % income tax; the military levy in section XX, subsection 10, clause 16-1; articles 291.4 and 293 for the single tax groups, limits and rates; 169.1.1 and 169.4.1 for the tax social benefit), the Law on the single contribution (article 8, 22 %), and the State Budget laws for 2025 and 2026 (minimum wage, living minimum, the contribution ceiling). The values for 2026:

  • minimum wage 8 647 ₴, living minimum for working-age people 3 328 ₴ (both on 1 January 2026);
  • income tax 18 %, military levy 5 %, contribution 22 % (1 902.34 ₴ a month on the minimum wage), ceiling 20 minimum wages (172 940 ₴ a month);
  • single tax group 1: at most 10 % of the living minimum a month (332.80 ₴), group 2: at most 20 % of the minimum wage (1 729.40 ₴), group 3: 5 % of income, or 3 % with VAT; military levy of groups 1 and 2: 10 % of the minimum wage a month (864.70 ₴), of group 3: 1 % of income;
  • yearly income limits: 167, 834 and 1 167 minimum wages, which is 1 444 049 ₴, 7 211 598 ₴ and 10 091 049 ₴.

A calculation for a past date takes the rules of that date, because each value has its own “applies from”. The rules start on 1 January 2025; for an earlier date the page uses the first set and says so. When a rate changes, a new entry is added with its own date and the old one stays. The Tax Code has another edition scheduled for 1 November 2026, so check the current text before relying on a number. This is a reference calculation, not tax advice: an accountant or the State Tax Service (tax.gov.ua) has the last word.

Limitations

  • Reference, not advice. A bank or a tax officer may count differently; check the contract and the current law.
  • The loan model uses a monthly rate (annual rate / 12) and the same day of each month; banks that count by actual days will differ slightly. It does not model a grace period, a variable rate or a rate that changes with a promotion.
  • The real rate includes the fees and insurance you enter, not other costs of the offer.
  • Taxes: only the basic tax social benefit; no other benefits, no VAT calculation, no tax on rental income or sales, no foreign income, and the over-the-limit tax is a rough estimate. The VAT registration rules for group 3 may change: check them.
  • A military levy due date for group 3 is not stated by the page: check it at tax.gov.ua.
  • The exchange rate chart of a long period is sampled; the ECB does not publish weekend rates.

Frequently asked questions

Why is the real rate higher than the bank’s rate?

Because it includes what the nominal rate leaves out: the one-off fee, monthly fees, insurance, and the fact that interest is charged monthly (a nominal 24 % a year is 26.8 % when compounded over 12 months).

Is the real rate the same as the one in my loan contract?

It should be close. The contract uses the method of the consumer credit law with the bank’s exact payment dates and its own list of costs; yours may include or exclude something that you did not enter here.

Does the page send my numbers anywhere?

No. Everything is calculated in your browser. The only requests are public exchange rates from the NBU and the ECB. A share link contains only the numbers of a calculation (and its country and currency), after the # sign, which is never sent to a server.

Does it work offline?

Yes, once opened. Exchange rates are kept with their date, so after the first visit you still see the last saved rates and are told how old they are.

Which date should I use for the tax rules?

The date the income was received or the tax is due for. The default is today.

How do I check a result?

Open “How it is calculated” under it and repeat one step with a calculator. A hidden page at #/selftest runs examples computed by hand (annuity, the real rate with fees, a deposit with capitalisation and tax, pay and sole-trader tax) in your browser.

Try MoneyBench now

Enter a loan offer with its fees and see what it really costs.

Open MoneyBench

Related tools