Методика налогового калькулятора
Эта страница — технический контракт компонента TaxCalculator. Она фиксирует смысл линий, допущения расчёта, официальные источники и причины интерфейсных решений. Последняя сверка: 17 августа 2026 года.
Граница модели
Калькулятор нужен для сравнения денежных моделей при одной и той же исходной сумме. Он не заменяет решение Пореской управы, бухгалтерский налоговый баланс, расчёт зарплаты, декларацию фрилансера или индивидуальную налоговую консультацию.
Правовые пороги и базы считаются в RSD. EUR и USD — только отображение той же шкалы по зафиксированному курсу компонента. Изменение валюты отображения не должно менять правовые пороги в RSD.
Архитектура
| Слой | Ответственность |
|---|---|
TaxCalculator.astro | Единственный публичный компонент. Принимает defaultSeries, адаптирует контекстные поля и метрики статьи, содержит ссылку на эту методику. Формул налоговых режимов здесь нет. |
TaxComparisonCalculator.astro | Слой сравнения. Добавляет только фриланс-модели, управляет дополнительными сериями, цветом слайдера и выбирает лучший включённый результат. Бизнес- и employee-формулы здесь не дублируются. |
EmployeeTaxCalculator.astro | Слой сотрудника. Добавляет employeeNet и employeeCost к предпринимательской базе и публикует текущий employee-результат для слоя сравнения. |
BusinessTaxCalculator.astro | Источник расчётов для предпринимателя: paušal, knjigaš, knjigaš + lična zarada, PDV, место реализации услуг, расходы, лимиты и текущие business-net. |
Слои передают текущие результаты вверх через data-* на общем корне .btc и события btc:business-updated, btc:employee-updated, btc:comparison-updated. Это намеренно: формула каждого предметного режима должна иметь одно место реализации, иначе график и карточка «Остаётся» начинают расходиться.
Поддерживаемые ключи: gross, pausal, books, booksSalary, employeeNet, employeeCost, freelance1, freelance2. Старый ключ pdv временно принимается только для обратной совместимости и нормализуется в booksSalary: PDV не является отдельным налоговым режимом.
Исходная сумма, расходы и PDV
В бизнес-контексте слайдер показывает месячную сумму, которую платит клиент. Без PDV это выручка до расходов и налогов. При применимом PDV сумма считается ценой с уже включённым налогом: компонент выделяет PDV из клиентской цены.
Поле «Расходы / мес» имеет два смысла, которые нельзя смешивать. Для всех предпринимательских линий расходы уменьшают фактический денежный остаток владельца. Только для knjigaš они дополнительно уменьшают расчётную прибыль и тем самым налоговую базу. Paušal от расходов не становится ниже, но денег после одинаковых бизнес-расходов у паушальца тоже остаётся меньше.
Порог 8 млн RSD нельзя применять ко всем поступлениям механически. Статья 33 Закона о PDV определяет учитываемый ukupan promet через статью 28(1) пункты 1–2 и не включает оборот из пункта 3 — операции, совершённые за границей. Для услуг место реализации определяется по статье 12: по общему B2B-правилу это место получателя, а для B2C и специальных видов услуг действуют другие правила.
Поэтому поле «Место реализации услуг» относится именно к моделируемому потоку услуг. При выборе «Вне Сербии · не считать 8M» компонент не начисляет сербский PDV, не учитывает этот поток в ориентире 8 млн и убирает 8M gauge и маркер с графика. Порог 6 млн для paušal остаётся отдельным и продолжает применяться. Переключатель не предназначен для экспорта товаров: экспорт товаров регулируется отдельным освобождением статьи 24 и для порога PDV учитывается иначе.
Даже в режиме «Сербия · считать 8M» линия 8 млн остаётся ориентиром: юридически обязанность определяется по фактическому учитываемому обороту за предыдущие 12 месяцев, а не по текущему месяцу × 12. При смешанном обороте внутри и вне Сербии калькулятор не делит один слайдер на части — такие потоки нужно считать раздельно. Входной PDV по расходам сравнительная модель пока не вычитает.
Paušal: база, дата регистрации и ограничение +10%
В текущей модели пользователь редактирует полную расчётную месячную налоговую базу paušal до коэффициента времени регистрации и до ограничения роста. Это именно база, а не итоговая сумма налога и взносов. После определения применимой базы компонент оценивает ежемесячное обязательство как налог 10% плюс обязательные взносы; для взносов используется действующая в модели минимальная и максимальная база 2026 года.
Коэффициент времени регистрации определяется по точной дате. В календарном году регистрации применяется 0,5. В последующие годы длительность регистрации оценивается на 31 декабря года, предшествующего расчётному: до 12 месяцев — 0,8; свыше 12 до 24 — 0,85; свыше 24 до 36 — 0,9; после 36 месяцев — 1. Поэтому одного года регистрации недостаточно: даты 30 и 31 декабря одного года могут попасть в разные интервалы.
Если менее чем за 18 месяцев до новой регистрации предприниматель уже был зарегистрирован для ведения предпринимательской деятельности, пользователь выбирает «Повторная <18 мес»; коэффициенты 0,5/0,8/0,85/0,9 в этой модели не применяются и используется 1.
Ограничение роста 2026–2027 годов применяется к установленной налоговой базе предыдущего года: текущая установленная база по общему правилу не должна быть выше неё более чем на 10%. Поэтому калькулятор просит поле «База за предыдущий год» из налогового решения. Если это поле пустое, компонент не пытается восстановить лимит из сегодняшней полной базы и прямо сообщает, что +10% не применён.
Ограничение +10% не привязано к году первоначальной регистрации. Оно может ограничить результат и для предпринимателя, зарегистрированного до 2024 года. В интерфейсе есть отдельный режим исключения для изменения кода деятельности, муниципалитета и/или места регистрации — случаев, для которых общее ограничение не применяется.
Последовательность 50% → 55% → 60,5% → 66,55%… остаётся полезной иллюстрацией только при специальных предпосылках: полная расчётная база условно стабильна, а известная установленная база первого года действительно равна 50% этой сопоставимой величины. Это не нормативная шкала скидок и больше не восстанавливается автоматически из одного года регистрации.
Knjigaš без lična zarada
Если к клиентской сумме применяется сербский PDV, он сначала выделяется из цены; затем вычитаются введённые признанные расходы. Если место реализации услуг находится вне Сербии в выбранной модели, PDV из клиентской суммы не выделяется. Налог на доход от самостоятельной деятельности считается по ставке 10% с расчётной налогооблагаемой прибыли, а не с валового оборота.
Для предпринимателя без личной зарплаты база обязательных взносов связана с oporeziva dobit. Уплаченные личные обязательные взносы признаются расходом, поэтому прибыль и взносы рассчитываются согласованно. Для 2026 года используются минимальная месячная база 51 297 RSD, максимальная месячная база 732 820 RSD и максимальная годовая база 8 793 840 RSD.
Knjigaš + lična zarada
Пользователь вводит bruto личной зарплаты. Взносы считаются с базы личной зарплаты в пределах действующих минимума и максимума; налог на зарплату — 10% с части bruto сверх необлагаемой суммы. Личная зарплата и связанные обязательства отражаются в книгах, а оставшаяся налогооблагаемая прибыль облагается по ставке 10%.
Выбор lična zarada — годовой режим, а не переключатель «на этот месяц». Для действующего предпринимателя уведомление подаётся до 15 декабря для применения с 1 января следующего года; новый предприниматель выбирает режим при регистрации.
Годовой налог на доход граждан
Компонент показывает оценку этого налога только там, где соответствующий доход может входить в годовую базу. Для 2026 года окончательный порог нельзя знать заранее: он зависит от средней годовой зарплаты за 2026 год. Пока используется последний опубликованный ориентир, и это должно оставаться явно обозначенной оценкой. Другие личные доходы и иждивенцы не моделируются.
Фриланс и сотрудник
Фриланс-модели считаются поквартально и переводятся в среднемесячный net для общей шкалы. Отдельный переключатель медицинского страхования показывается только когда включена хотя бы одна фриланс-серия.
Для сотрудника две разные линии имеют разный смысл: employeeNet — сколько получает сотрудник, employeeCost — полная стоимость для работодателя (bruto 2). Они имеют один цвет и различаются сплошной/пунктирной линией, чтобы читаться как две стороны одной зарплатной модели.
Почему интерфейс устроен так
- График находится выше параметров и карточек: основной сценарий — быстро увидеть переломы и сравнение режимов, а потом уточнять ввод.
- Главный ввод — один слайдер: ранние версии перегружали верх формы расходами, кодом деятельности и отдельными PDV-переключателями.
- Дополнительные серии скрыты под «+»: базовый контекст статьи остаётся компактным, но сотрудник и фриланс не теряются.
- Включённая дополнительная серия остаётся в легенде после сворачивания: пользователь не теряет понимание того, что сейчас нарисовано.
- Цвет слайдера следует лучшей включённой самостоятельной модели: во время drag цвет удерживается, чтобы не мигать на пересечениях линий.
- Gauges 6M/8M встроены в карточку режима: отдельные progress bar занимали слишком много места. На мобильных gauges унесены в правый верхний угол карточки.
- Paušal редактируется прямо в карточке: в режиме редактирования карточка явно подписана «Полная база / мес», а её обычное состояние показывает оценочное ежемесячное обязательство.
- Для +10% нужен отдельный прошлогодний ввод: без базы предыдущего решения точный statutory cap восстановить нельзя; калькулятор не подменяет недостающий факт эвристикой.
- PDV — поле, а не линия: статус PDV ортогонален способу налогообложения knjigaš.
- Место реализации отделено от ставки PDV: сначала определяется, относится ли поток услуг к сербскому PDV и порогу 8M, затем — ставка для операций в Сербии. Это не сводится к стране банковского перевода или клиента.
- Поля показываются контекстно: четыре параметра paušal показываются только для paušal, личная зарплата — только для
booksSalary, место реализации и PDV — только для книгаша, расходы — для любой предпринимательской линии. - На мобильном поля остаются по два в ряд: двухколоночная сетка сохраняет компактность калькулятора и уменьшает вертикальную прокрутку.
История решений
| Дата / PR | Что закреплено |
|---|---|
| 13.08.2026 · #45 | Первая интерактивная бизнес-модель: лимиты 6M/8M, расходы, PDV и ввод paušal; knjigaš сразу был обозначен как требующий дальнейшего уточнения. |
| 13.08 · #46–49 | Убраны лишние вводы, график перенесён вверх, progress bar заменены gauges, добавлена оценка годового налога на высокий доход. |
| 14.08 · #58–65 | Сокращены подписи, стабилизирован цвет слайдера, добавлены настраиваемые серии, фриланс-контекст и единый публичный TaxCalculator; доведена мобильная компоновка. |
| 15.08 · #67, первая итерация | Исправлен knjigaš, добавлены lična zarada, расходы, min/max базы, PDV отделён от режима. Внутренние слои получили предметные имена business → employee → comparison. |
| 15.08 · #67, внешнее ревью | Убрана эвристика 0.5 × 1.1^N: +10% теперь требует установленную базу прошлого года. Год регистрации заменён точной датой. Формулы business/employee удалены из слоя comparison и оставлены в одном source of truth. |
| 17.08 · текущая итерация | Порог 8M перестал считаться от любого оборота: добавлено место реализации услуг. Поток услуг с местом реализации вне Сербии не получает сербский PDV и не показывает 8M как применимый порог; 6M paušal остаётся отдельным. |
Контрольные сценарии перед изменением
- Регистрация в расчётном году: применяется коэффициент 0,5.
- Для 2026 года регистрация 31.12.2024 попадает в интервал до 12 месяцев на 31.12.2025, а 30.12.2024 — уже в следующий интервал.
- Повторная регистрация менее чем через 18 месяцев: коэффициент времени регистрации равен 1.
- При известной базе предыдущего года cap 2026–2027 ограничивает текущую базу значением
previous × 1.1. - Без базы предыдущего решения +10% не угадывается и интерфейс явно предупреждает об этом.
- При выбранном исключении изменения кода/муниципалитета/места cap +10% не применяется.
- Расходы уменьшают денежный остаток paušal и одновременно уменьшают налоговую прибыль knjigaš.
- Knjigaš с высокой выручкой: взносы перестают расти после максимальной базы.
booksSalaryреагирует на изменение bruto личной зарплаты.- Результат
BusinessTaxCalculatorи выбранная business-линия вTaxComparisonCalculatorсовпадают, потому что comparison читает опубликованный net, а не пересчитывает формулу. - Employee net в общем сравнении совпадает с результатом
EmployeeTaxCalculator. - PDV не появляется как самостоятельная серия и не удваивает налог в клиентской цене.
- Для услуг с местом реализации вне Сербии effective PDV равен 0, поле ставки отключено, 8M gauge и графический маркер скрыты, а линия 6M остаётся.
- После возврата места реализации в Сербию поле ставки, 8M gauge и маркер восстанавливаются, а режим Auto снова применяет 20% после модельного порога.
- При выключении предпринимательских серий исчезают их поля и gauges.
- Дополнительные серии корректно раскрываются через «+», а включённые не исчезают после сворачивания.
- На мобильном gauges не перекрывают значение режима, а нижние параметры остаются по два в строке.
Основные официальные источники
- Правовая информационная система: действующая редакция Закона о PDV, в частности статьи 12, 24, 28 и 33.
- Пореска управа: POPDV 11.1 — оборот с местом реализации вне Республики не является предметом сербского PDV.
- Министерство финансов: действующая редакция Уредбы о paušal, включая изменения 115/2025.
- Пореска управа: ограничение роста базы paušal на 2026–2027 годы.
- Пореска управа: 50% в год регистрации.
- Пореска управа: правила paušal, элементы формулы и период регистрации.
- Министерство финансов: Закон о взносах на обязательное социальное страхование.
- PIO: базы взносов на 2026 год.
- Пореска управа: уведомление о lična zarada на 2026 год.