Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Расчёт НДС и налогов: практика

Расчёт НДС и налогов: ставка, база и округление

Расчёт налогов в коде: выделение налога из суммы, начисление сверху, налоговая база, ставки и порядок округления результата.

Прямой ответ

Налог рассчитывается от налоговой базы по ставке, поэтому способ расчёта определяется тем, включён налог в сумму либо начисляется сверху.

Способ Как считается
Выделение из суммы База = сумма / (1 + ставка)
Начисление сверху Налог = сумма × ставка
Налоговая база Значение, от которого считается налог
Округление Приведение результата к разряду валюты
from decimal import Decimal, ROUND_HALF_UP

rate = Decimal("0.20")
gross = Decimal("1200.00")
net = (gross / (1 + rate)).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
vat = gross - net

Налог выделяется из суммы вычитанием базы из итога, поэтому сумма базы и налога совпадает с исходной суммой. Об округлении — в статье про округление денежных значений.

Выделение налога и начисление сверху

Способ расчёта определяется тем, включён налог в сумму либо начисляется сверху, поэтому формула различается.

Выделение из суммы. Налоговая база вычисляется делением суммы на единицу со ставкой, поэтому налог определяется вычитанием базы из суммы.

Начисление сверху. Налог вычисляется умножением базы на ставку, поэтому итоговая сумма определяется сложением базы и налога.

Совпадение итога. Сумма базы и налога равна исходной сумме, поэтому расчёт проверяется сложением частей.

Практическое следствие: расчёт налога умножением суммы на ставку при включённом налоге даёт завышенное значение, поскольку ставка применяется к сумме с налогом.

Отдельный аспект — порядок вычитания. Налог определяется вычитанием округлённой базы из суммы, поэтому сумма частей совпадает с исходной суммой. Расчёт налога отдельным умножением с последующим округлением даёт значение, отличающееся на разменную единицу.

Налоговая база и ставки

Налоговая база определяет значение, от которого считается налог, поэтому состав базы влияет на результат расчёта.

Состав базы. База включает сумму операций, облагаемых налогом, поэтому операции без налога исключаются из базы.

Разные ставки. Операции могут облагаться по разным ставкам, поэтому расчёт выполняется отдельно по каждой ставке.

Операции без налога. Операции, не облагаемые налогом, исключаются из базы, поэтому итог по ставкам не включает такие операции.

Практическое следствие: расчёт налога от общей суммы без разделения по ставкам даёт значение, не соответствующее расчёту по каждой ставке отдельно.

Округление и проверка расчёта

Округление результата приводит значение к разряду валюты, поэтому сумма частей проверяется против исходной суммы.

Округление после расчёта. Промежуточные значения сохраняют точность, поэтому округление применяется к итоговому значению.

Проверка суммы частей. Сумма базы и налога сравнивается с исходной суммой, поэтому расхождение указывает на ошибку округления.

Итог по периоду. Налог по периоду считается как сумма налога по операциям, поэтому итог не пересчитывается от общей суммы периода.

Практическое следствие: налог, посчитанный от общей суммы периода, отличается от суммы налога по операциям, поскольку округление применяется к иному значению.

О хранении денежных значений — в статье про деньги в приложении; о формировании отчётности — в статье про финансовые отчёты.

Практика: расчёт налогов

1. Определяйте способ расчёта: выделение либо начисление. Формула зависит от того, включён налог в сумму либо начисляется сверху.

2. Вычисляйте налог вычитанием базы из суммы. Сумма частей совпадает с исходной суммой, поэтому расхождение исключается.

3. Разделяйте операции по ставкам. Расчёт по каждой ставке выполняется отдельно, поэтому итог соответствует составу операций.

4. Исключайте операции без налога из базы. База включает только облагаемые операции, поэтому расчёт не завышается.

5. Округляйте после полного вычисления. Промежуточные значения сохраняют точность, поэтому итог не накапливает погрешность.

6. Проверяйте сумму базы и налога против исходной суммы. Расхождение указывает на ошибку округления либо на неверную формулу.

7. Считайте налог по периоду как сумму по операциям. Итог не пересчитывается от общей суммы периода.

Рекомендации:

  1. Не применяйте ставку к сумме с включённым налогом. Значение завышается, поскольку ставка должна применяться к базе.
  2. Учитывайте разделение по ставкам при смешанных операциях. Расчёт от общей суммы даёт значение, не соответствующее расчёту по ставкам.
  3. Сопоставляйте порядок округления с требованием отчётности. Округление на каждом шаге даёт иной итог.
  4. Фиксируйте ставку в настройках расчёта. Изменение ставки применяется с даты, поэтому исторические операции не пересчитываются.
  5. Пересматриваем состав базы при изменении правил. Новая категория операций требует включения либо исключения из базы.

Практический сценарий: налог завышался при включённой ставке

Контекст: сумма налога в счёте превышала ожидаемую, при этом ставка и сумма операции были указаны верно.

  1. Диагностика. Проверка показала, что налог вычислялся умножением итоговой суммы на ставку. Поскольку налог был включён в сумму, ставка применялась к значению с налогом, поэтому результат завышался.
  2. Причина. Способ расчёта не соответствовал способу включения налога: вместо выделения из суммы применялось начисление сверху.
  3. Действия. (а) Заменили формулу на выделение налога из суммы делением на единицу со ставкой, чтобы база вычислялась корректно; (б) определили налог вычитанием округлённой базы из суммы, чтобы сумма частей совпадала с исходной суммой; (в) разделили операции по ставкам, чтобы расчёт выполнялся отдельно для каждой ставки; (г) пересчитали счета и сравнили с ожидаемыми значениями; (д) добавили проверку суммы базы и налога против итоговой суммы, чтобы расхождение обнаруживалось.
  4. Результат. Сумма налога соответствует ставке и базе, поэтому расчёт совпадает с ожидаемым значением.

Вывод: применение ставки к сумме с включённым налогом завышает результат, поскольку ставка должна применяться к налоговой базе. Выделение базы делением и определение налога вычитанием делают расчёт соответствующим способу включения налога.

FAQ

Как выделить налог из суммы с включённым налогом? База вычисляется делением суммы на единицу со ставкой, налог определяется вычитанием базы из суммы.

Почему налог лучше считать вычитанием, а не умножением? Сумма округлённой базы и налога совпадает с исходной суммой, поэтому расхождение на разменную единицу исключается.

Как считать налог при разных ставках? Расчёт выполняется отдельно по каждой ставке. Расчёт от общей суммы даёт значение, не соответствующее составу операций.

Как считается налог за период? Как сумма налога по операциям. Пересчёт от общей суммы периода даёт иное значение из-за округления.

Источники: Python decimal, PostgreSQL numeric types, PostgreSQL math functions — ссылки в шапке.