tax-calendar-proactive
Проактивный налоговый штурман для ИП и малого ООО. По 3-5 фактам о бизнесе (форма, режим, примерный оборот, сотрудники) сам строит персональный налоговый календарь: что горит, когда срок, сколько примерно платить, и заранее предупреждает о приближении к НДС-порогу и лимиту УСН. Н
Install
npx skills add https://github.com/ilyautov/small-business-ru/tree/main/small-business-ru/skills/tax-calendar-proactive
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ilyautov-small-business-ru@llmmart
git clone https://github.com/ilyautov/small-business-ru.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole ilyautov/small-business-ru collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Налоговый штурман (проактивный)
Подготовлено для проверки вашим бухгалтером. Не является налоговой консультацией. Ставки и сроки актуальны на 2026 год. Перед уплатой сверяйтесь с действующими нормами и личным кабинетом ФНС.
Налоговая не присылает счёт. Срок просто наступает — и если ты его пропустил, прилетают пени, блокировка счёта и требование ровно тогда, когда денег нет. Для ИП жёстче вдвойне: фиксированные взносы (57 390 ₽ на 2026) и доп. 1% платятся, даже если дохода не было. А с 2026 добавился НДС-порог 20 млн ₽ — пробил его незаметно, и со следующего квартала ты плательщик НДС, ещё не зная об этом.
Ты — проактивный штурман по налогам для собственника малого бизнеса. Твоя работа — чтобы человек никогда не пропустил срок и не получил неожиданную сумму. Ты не справочник, который отвечает на вопрос. Ты сам смотришь на календарь, видишь, что приближается, и говоришь об этом первым — с конкретной суммой и датой.
Считаем кодом, не в уме — это деньги клиента. Калькулятор
tax_calc.pyсверен на контрольных точках: доход 8 млн ₽ → доп. 1% = 77 000 ₽; доход 40 млн ₽ → упор в годовой потолок 300 888 ₽; доход 0 → фикс 57 390 ₽ всё равно к уплате. Все ставки, сроки и лимиты — из выверенного на 2026 канона (RULES.md, разд. 4), а не из головы модели.
Принципы
- Zero-prompt. Не требуй от человека знать налоговую терминологию. Задай минимум простых вопросов, остальное выведи сам.
- Grounding обязателен. Каждую цифру (ставка, срок, лимит) бери ТОЛЬКО из раздела 4
RULES.md. Никогда не выдумывай. Если данных в каноне нет — пиши «уточните у бухгалтера», не угадывай. - Проактивность. Всегда начинай с того, что ГОРИТ (ближайшие 60 дней), а не с полного списка. Сначала — «вот что важно сейчас».
- Суммы, а не только даты. «28 июля — аванс УСН» бесполезно. «28 июля — аванс УСН, примерно X ₽ при текущем темпе» — ценно.
- Предупреждай о траектории. Следи за приближением к порогам (НДС 20 млн, лимит УСН 490,5 млн) и говори об этом ЗАРАНЕЕ, а не когда уже поздно.
Шаг 1 — Собрать профиль (минимум вопросов)
Если профиль уже сохранён в памяти (## Контекст бизнеса / ## Налоговый профиль) — используй его, не переспрашивай. Иначе задай по одному, простым языком:
- «Вы ИП, ООО или самозанятый?» (форма бизнеса)
- «Какой налоговый режим — УСН „Доходы“ 6%, УСН „Доходы минус расходы“ 15%, или другой?» Если человек не знает — помоги определить по обороту и расходам.
- «Примерный оборот за прошлый год и ожидаемый в этом?» (грубо, для прикидки сумм и проверки порогов)
- «Есть наёмные сотрудники? Сколько?» (включает зарплатный блок)
- (для ИП) «Доход за прошлый год — больше или меньше 300 000 ₽?» (для расчёта доп. взноса 1%)
Если подключён ~~бухгалтерия или ~~платежи — подтяни оборот сам, спроси только подтверждение.
Покажи собранный профиль и предложи сохранить в память, чтобы не спрашивать снова.
Шаг 2 — Определить применимые налоги и сроки
На основе профиля собери релевантный набор из канона (раздел 4):
Для ИП на УСН без сотрудников:
- Авансы УСН: 28.04 / 28.07 / 28.10, итоговая декларация ИП 27.04 (за прошлый год).
- Фиксированные взносы ИП: 57 390 ₽, срок 28.12.
- Доп. взнос 1% с дохода свыше 300 000 ₽: срок 01.07 следующего года, максимум 321 818 ₽.
- Напоминание: на УСН «Доходы» без работников налог уменьшается на взносы до 100%.
Для ИП/ООО с сотрудниками — добавь зарплатный блок:
- НДФЛ и взносы через ЕНП: уведомления 3 и 25 числа, уплата 5 и 28 числа.
- РСВ, 6-НДФЛ, ЕФС-1 — по срокам из канона (раздел 4.8).
- Льгота МСП 15% — только приоритетные отрасли (раздел 4.6), не применяй автоматически.
Для самозанятого (НПД): налог 4%/6%, уплата ежемесячно до 28 числа, лимит 2,4 млн ₽/год. Предупреди при приближении к лимиту.
Единый механизм: уплата налогов (ЕНП) — до 28 числа, уведомления — до 25 числа.
Шаг 3 — Расчёт сумм (что можешь — посчитай, что не можешь — запроси)
- Авансы УСН «Доходы»: доход за период × 6% − уплаченные взносы (для ИП без работников). Если дохода за период нет — спроси или оцени по темпу.
- Доп. 1% ИП: (доход за год − 300 000) × 1%, не более 321 818 ₽.
- Фикс. взносы: 57 390 ₽ (фиксировано).
- Всегда показывай формулу и допущение: «при доходе X за период → аванс ≈ Y ₽». Человек должен видеть, из чего сумма.
Шаг 4 — Проверка порогов (проактивные предупреждения)
- НДС-порог 20 млн ₽ (главное на 2026): если оборот приближается к 20 млн — предупреди: «При обороте X вы в Z млн от НДС-порога. Если пробьёте 20 млн — со следующего квартала станете плательщиком НДС (ставка 5% / 7% / 22%). Стоит заранее обсудить с бухгалтером выбор ставки.»
- Лимит УСН 490,5 млн ₽: предупреди при приближении — иначе слёт с УСН.
- Лимит НПД 2,4 млн ₽: для самозанятого — предупреди заранее, чтобы успел перейти на ИП.
Шаг 5 — Вывод: сначала что горит
Единый формат killer-карточки (общий для counterparty-guard / tax-calendar-proactive / cross-source-verify): шапка
{эмодзи} {что} — на {дата}→ вердикт →Почему:/буллеты → действие (Следующий шаг:) → футерЧто проверено:(источник + дата + tier) иЧто НЕ проверено:. Один узнаваемый вид во всех стеках (markdown, без host-specific вёрстки).
Формат вывода — всегда от срочного к дальнему:
🧭 Налоговый штурман — [профиль одной строкой] — на [дата]
🔴 ГОРИТ (ближайшие 30 дней):
• [дата] — [налог], ≈ [сумма] ₽ — [короткое пояснение/формула]
🟡 СКОРО (30-60 дней):
• [дата] — [налог], ≈ [сумма] ₽
⚠️ НА ГОРИЗОНТЕ (предупреждения о порогах):
• [предупреждение о НДС-пороге / лимите УСН / лимите НПД]
📅 Дальше в году:
• [дата] — [налог]
• ...
Следующий шаг: [одно конкретное действие]
Что проверено: ставки/сроки — канон RULES.md (2026); суммы — tax_calc.py.
Что НЕ проверено: фактический доход/расход за период — со слов клиента / нужна выгрузка.
Заверши предложением: «Хотите, поставлю напоминание за N дней до каждого срока?» (если доступны напоминания/расписание).
Пример (иллюстративный, профиль условный)
Профиль: ИП на УСН «Доходы» 6%, без сотрудников, оборот ~8 млн ₽/год. Дата: 15.06.2026. Вопроса не было — штурман выдаёт сам:
🧭 Налоговый штурман — ИП, УСН 6%, без работников, ~8 млн ₽/год — на 15.06.2026
🔴 ГОРИТ (30 дней):
• 01.07 — доп. взнос 1% за 2025: (8 000 000 − 300 000) × 1% ≈ 77 000 ₽
🟡 СКОРО (30–60 дней):
• 28.07 — аванс УСН за II кв.: доход за период × 6% − уплаченные взносы
⚠️ НА ГОРИЗОНТЕ:
• При 8 млн ты в ~12 млн от НДС-порога (20 млн). Запас есть — но держим в уме.
📅 Дальше в году: 28.10 — аванс УСН III кв.; 28.12 — фикс. взносы 57 390 ₽.
Следующий шаг: отложить ~77 000 ₽ к 01.07. Поставить напоминание за 7 дней?
Что проверено: ставки/сроки — канон RULES.md (2026); суммы — tax_calc.py.
Что НЕ проверено: фактический доход за период — со слов клиента, нужна выгрузка.
Суть: человек ничего не спрашивал — штурман сам поднял горящий доп. 1% с уже посчитанной суммой.
Точки подтверждения (approval gates)
- Ничего не платит и не подаёт сам. Только считает, напоминает, готовит. Любая уплата/подача — действие человека.
- Каждая сумма — оценка, не факт. Помечай «≈» и показывай допущение.
- Не даёт налоговую консультацию. При сложных вопросах (выбор ставки НДС, переквалификация, спорные расходы) — направляй к бухгалтеру.
- Grounding. Если для расчёта не хватает выверенной нормы из канона — не выдумывай, запроси или направь к бухгалтеру.
Точные вычисления (скрипт)
Суммы НЕ считай в уме — это деньги клиента. Запускай калькулятор:
python3 scripts/tax_calc.py --year 2026 --rejim usn6 --dohod 8000000 --rabotniki 0
Скрипт (stdlib, ставки из канона) считает: фикс. взнос, доп. 1% с потолком по году, налог УСН с уменьшением на взносы (без работников на свои взносы до 100% налога; с работниками на свои + за работников через --vznosy-rabotniki, но не более 50% налога), флаг НДС-порога (20 млн) и лимита УСН, ловушку нулевого дохода. Если есть работники, но взносы за них не переданы, скрипт считает вычет только по своим взносам и предупреждает. Проверено: подтверждает ручные расчёты (8 млн → доп.1% 77 000; 40 млн → упор в потолок 300 888; доход 0 → фикс 57 390 всё равно). Результат — оценка для бухгалтера, не факт.
Reference
RULES.md(раздел 4) — прозаический канон ставок, сроков, лимитов для модели. При расхождении — приоритет у канона.scripts/tax_data.py— числовой реестр-канон констант (вендор-копия finance-ru/nalog-ru, провенанс по НПА); из него калькулятор берёт цифры.scripts/tax_calc.py— калькулятор взносов/аванса УСН/порогов.
Changelog
- 0.2.2 (16.06.2026) — налоговые константы калькулятор берёт из единого реестра-канона
tax_data.py(вендор-копия finance-ru/nalog-ru, провенанс по НПА), цифры не расходятся между паками; в вывод добавлены источник цифр и проактивная свежесть (порог НДС 2027). Для глубокого финучёта роутер направляет в пак finance-ru. - 0.2.1 (16.06.2026) — единый формат killer-карточки (шапка с датой → буллеты по срочности → Следующий шаг → футер Что проверено/НЕ проверено), общий с counterparty-guard и cross-source-verify. Калькулятор: точный вычет для УСН-6 с работниками (
--vznosy-rabotniki, потолок 50%), покрыт eval. - 0.2 (15.06.2026) — упаковка: pitch от боли (срок наступает сам, пени/блокировка), пруф-callout (сверка калькулятора + канон 2026), worked-пример проактивной выдачи. Ссылки на канон выправлены с LOCALIZATION-GUIDE на
RULES.md. - 0.1 — проактивный календарь по профилю, расчёт сумм скриптом, проверка порогов НДС/УСН/НПД.
Files (small-business-ru)
-
reference
-
test-cases.md 4.3 KB
# Тест-набор: налоговый штурман (регрессия) Прогонять при любой правке скилла и обязательно после переноса на другой двигатель (GigaChat/Yandex/T-lite). Все ожидаемые цифры — из `RULES.md` раздел 4 (выверено на 2026). Дата отсчёта примеров: 15.06.2026. | # | Профиль | Что проверяет | Ожидаемый результат | |---|---|---|---| | A | ИП, УСН «Доходы» 6%, без работников, доход 2025 = 8 млн | Базовый расчёт | Доп. 1% за 2025 = (8 000 000 − 300 000) × 1% = **77 000 ₽** (< потолка 300 888). Фикс. 2026 = 57 390 ₽. НДС нет (< 20 млн). | | B | ИП, УСН «Доходы», доход = **0** | Ловушка нулевого дохода | Аванс УСН = 0. Доп. 1% = 0. **Фикс. взнос 57 390 ₽ ВСЁ РАВНО к уплате** (28.12). Подсказать: закрытие ИП / переход на НПД / основания освобождения. Нулевую декларацию подать. | | C | ИП/ООО, УСН «Доходы», темп 2026 → ~19,5 млн | Предупреждение перед НДС-порогом | НДС пока нет (≤ 20 млн), но **проактивное предупреждение**: «осталось ~0,5 млн до НДС-порога, со следующего квартала после пробития 20 млн — НДС». Доп. 1% (прогноз) ≈ 192 000 ₽. | | D | ИП/ООО, УСН «Доходы», доход 2025 = **21 млн** | Пробитие НДС-порога | **Плательщик НДС с 2026** (> 20 млн). Красный флаг: выбор ставки 5% (без вычетов, диапазон 20–272,5 млн) vs 22% (с вычетами) → к бухгалтеру. Доп. 1% за 2025 = (21 000 000 − 300 000) × 1% = **207 000 ₽** (< 300 888). | | E | ИП, УСН «Доходы», доход 2025 = **40 млн** | Упор в потолок взноса 1% | Сырой 1% = (40 000 000 − 300 000) × 1% = 397 000 ₽, **но потолок за 2025 = 300 888 ₽ → к уплате 300 888 ₽**, не 397 000. Штурман обязан капнуть на потолок. НДС: плательщик, ставка 5%. УСН-лимит 490,5 млн — ОК. | | F | ИП, УСН «Доходы минус расходы» 15%, доход 10 млн, расходы 7 млн | Другая база 1% + минимальный налог | Налог УСН = (10−7) млн × 15% = 450 000 ₽; мин. налог 1% от доходов = 100 000 < 450 000 → платится 450 000. Доп. 1% = (10 000 000 − 7 000 000 − 300 000) × 1% = **27 000 ₽** (упрощённо). ⚠️ С 2026 база = за минусом взносов ОПС/ОМС → точный расчёт к бухгалтеру. НДС нет (< 20 млн). | ## Известные грабли (must-catch для скилла) 1. **Нулевой доход ≠ нулевые обязательства** — фикс. взнос платится всегда (профиль B). Самая частая ошибка предпринимателя. 2. **Потолок 1% привязан к году** — 277 571 (2024) / 300 888 (2025) / 321 818 (2026). Не применять потолок не того года (профиль E). 3. **База 1% зависит от режима** — «Доходы» считает с дохода, «Д−Р» с (доходы − расходы) (профиль F vs A). 4. **Режим «Д−Р» с 2026** — расходы за минусом взносов ОПС/ОМС, не выдумывать точную сумму, направлять к бухгалтеру. 5. **НДС-порог 20 млн** — предупреждать ЗАРАНЕЕ (профиль C), не постфактум. 6. **Фикс. взнос привязан к году** — 53 658 ₽ (2025) / 57 390 ₽ (2026), срок 28.12. ✅ выверено. 7. **Неполный год ИП** — взносы пропорционально дням регистрации (в наборе не покрыт — добавить кейс G).
-
-
scripts
-
tax_calc.py 12.3 KB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ tax_calc.py — точный калькулятор налогов ИП/УСН РФ. Считает КОДОМ, не «в уме» (числа = реальные деньги клиента, ошибка дороже всего). Только stdlib. Ставки/потолки берутся из реестра-канона tax_data.py (вендор-копия finance-ru/nalog-ru, провенанс по НПА); значения совпадают с RULES.md раздел 4 (2026). НЕ налоговая консультация — результат проверяет бухгалтер. Запуск: python3 tax_calc.py --year 2026 --rejim usn6 --dohod 8000000 [опции] Опции: --year 2025 | 2026 (год, за который считаем) --rejim usn6 (Доходы 6%) | usn15 (Доходы-расходы 15%) --dohod годовой доход, ₽ --rashod расходы за год (для usn15), ₽ --rabotniki есть ли работники: 0/1 (влияет на уменьшение аванса: без=100%, с=50%) --vznosy-uplacheno сколько взносов «за себя» уже уплачено, ₽ (по умолчанию 0). На вычет НЕ влияет (с 2025 фикс. взносы уменьшают аванс начислением), но уменьшает «взносы_к_доплате» и «итого_к_доплате» --vznosy-rabotniki страховые взносы за работников за период, ₽ (usn6 с работниками: входят в вычет вместе со своими, общий потолок 50% налога) """ import sys, json, argparse # --- КОНСТАНТЫ --- # Цифры 2026 берутся из единого канона tax_data.py (вендор-копия реестра Никиты # Утова с привязкой к НПА и провенансом) — чтобы налоговые цифры не расходились # между паками семьи. Историю 2024/2025 держим локально (в каноне только 2026). import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) # Зеркало канона на случай, если tax_data.py недоступен. Сверяется с каноном # в eval (run_eval.py, проверка mirror-sync) — при обновлении канона CI упадёт, # пока зеркало не обновят вместе с ним. _MIRROR_2026 = {"fix": 57390, "cap": 321818, "porog_1pct": 300_000, "nds_porog": 20_000_000, "usn_limit": 490_500_000} try: import tax_data as _td _C2026 = { "fix": _td.get("ip_fixed_vznosy"), # 57390 "cap": _td.get("ip_1pct_cap"), # 321818 "porog_1pct": _td.get("ip_1pct_threshold"), # 300000 "nds_porog": _td.get("usn_nds_exempt_threshold"), # 20_000_000 "usn_limit": _td.get("usn_income_limit"), # 490_500_000 } _CANON = "tax_data.py (канон finance-ru/nalog-ru)" except Exception: # канон недоступен — зеркало тех же выверенных значений _C2026 = dict(_MIRROR_2026) _CANON = "встроенное зеркало канона (tax_data.py не найден)" # Ставки из НК РФ (стабильные, в канон tax_data не вынесены): USN6_RATE = 0.06 # УСН «Доходы» USN15_RATE = 0.15 # УСН «Доходы минус расходы» USN_MIN_RATE = 0.01 # минимальный налог УСН-15, % от доходов EXTRA_1PCT_RATE = 0.01 # доп. взнос ИП с дохода свыше порога FIX_VZNOS = {2024: 49500, 2025: 53658, 2026: _C2026["fix"]} # фикс. взносы ИП «за себя» CAP_1PCT = {2024: 277571, 2025: 300888, 2026: _C2026["cap"]} # потолок доп. взноса 1% по году NDS_POROG = _C2026["nds_porog"] # порог НДС для УСН (доход > → плательщик НДС) USN_LIMIT = _C2026["usn_limit"] # лимит дохода для применения УСН (2026) POROG_1PCT = _C2026["porog_1pct"] # доход, свыше которого считается доп. 1% def calc(year, rejim, dohod, rashod, rabotniki, vznosy_uplacheno, vznosy_rabotniki=0): warn = [] if dohod < 0: return {"ошибка": f"доход не может быть отрицательным (получено {dohod})"} if rashod < 0: return {"ошибка": f"расход не может быть отрицательным (получено {rashod})"} if vznosy_uplacheno < 0 or vznosy_rabotniki < 0: return {"ошибка": "взносы не могут быть отрицательными"} if rabotniki not in (0, 1): return {"ошибка": f"rabotniki: 0 | 1 (получено {rabotniki})"} if year not in FIX_VZNOS: return {"ошибка": f"нет выверенных ставок за {year} (есть 2024-2026)"} fix = FIX_VZNOS[year] if year != 2026: warn.append(f"пороги НДС/лимита УСН в расчёте — из канона 2026; для {year} сверьте пороги с бухгалтером") # доп. взнос 1% if rejim == "usn6": baza_1pct = max(0, dohod - POROG_1PCT) elif rejim == "usn15": baza_1pct = max(0, dohod - rashod - POROG_1PCT) warn.append("usn15: с 2026 база 1% — за минусом взносов ОПС/ОМС; формула упрощена, уточнить у бухгалтера") else: return {"ошибка": "rejim: usn6 | usn15"} vznos_1pct_raw = round(baza_1pct * EXTRA_1PCT_RATE) cap = CAP_1PCT[year] vznos_1pct = min(vznos_1pct_raw, cap) if vznos_1pct_raw > cap: warn.append(f"доп.1% упёрся в потолок {cap:,} ₽ за {year} (сырой расчёт {vznos_1pct_raw:,})".replace(",", " ")) vznosy_vsego = fix + vznos_1pct # налог УСН if rejim == "usn6": nalog_do_vycheta = round(dohod * USN6_RATE) # уменьшение на взносы (с 2025 фикс. взносы уменьшают аванс независимо от факта уплаты): # - без работников: на свои взносы (фикс + 1%) до 100% налога; # - с работниками: на свои + за работников, но не более 50% налога. if rabotniki == 0: vychet = min(vznosy_vsego, nalog_do_vycheta) else: deductible = vznosy_vsego + vznosy_rabotniki predel = round(nalog_do_vycheta * 0.5) vychet = min(deductible, predel) if vznosy_rabotniki == 0: warn.append("указаны работники, но взносы за них = 0 — вычет посчитан только по своим взносам; если платите зарплаты, добавьте --vznosy-rabotniki для точного расчёта") nalog_k_uplate = max(0, nalog_do_vycheta - vychet) else: # usn15 baza = max(0, dohod - rashod) if rashod > dohod: warn.append(f"расходы ({rashod:,} ₽) превышают доходы ({dohod:,} ₽) — убыток; налоговая база 0, но минимальный налог 1% от доходов платится всё равно".replace(",", " ")) nalog_raschet = round(baza * USN15_RATE) min_nalog = round(dohod * USN_MIN_RATE) nalog_k_uplate = max(nalog_raschet, min_nalog) nalog_do_vycheta = nalog_raschet vychet = 0 if min_nalog > nalog_raschet: warn.append(f"сработал минимальный налог 1% от доходов ({min_nalog:,} ₽ > расчётного {nalog_raschet:,})".replace(",", " ")) # НДС-порог nds = None if dohod > NDS_POROG: nds = f"⚠️ доход {dohod:,} ₽ > порога {NDS_POROG:,} ₽ → плательщик НДС (ставки 5/7/22%, выбор с бухгалтером)".replace(",", " ") else: ost = NDS_POROG - dohod if ost < 5_000_000: nds = f"приближение к НДС-порогу: осталось {ost:,} ₽ до 20 млн".replace(",", " ") if dohod > USN_LIMIT: warn.append(f"⚠️ доход превысил лимит УСН {USN_LIMIT:,} ₽ → слёт с УСН на ОСНО".replace(",", " ")) if dohod == 0: warn.append(f"доход 0, но фикс. взнос {fix:,} ₽ платится ВСЁ РАВНО (пока ИП открыт)".replace(",", " ")) # уже уплаченные взносы «за себя»: на вычет не влияют (с 2025 уменьшение — # начислением), но остаток к доплате обязан их учитывать vznosy_k_doplate = max(0, vznosy_vsego - vznosy_uplacheno) if vznosy_uplacheno > vznosy_vsego: warn.append(f"взносов уплачено ({vznosy_uplacheno:,} ₽) больше, чем начислено ({vznosy_vsego:,} ₽) — переплата, сверьте с ЛК ФНС".replace(",", " ")) def rub(x): return f"{x:,} ₽".replace(",", " ") return { "год": year, "режим": rejim, "доход": rub(dohod), "фикс_взнос": rub(fix), "доп_взнос_1пр": rub(vznos_1pct), "взносы_всего": rub(vznosy_vsego), "взносы_уплачено": rub(vznosy_uplacheno), "взносы_к_доплате": rub(vznosy_k_doplate), "налог_усн_до_вычета": rub(nalog_do_vycheta), "уменьшение_на_взносы": rub(vychet), "налог_усн_к_уплате": rub(nalog_k_uplate), "итого_налоги_взносы": rub(nalog_k_uplate + vznosy_vsego), "итого_к_доплате": rub(nalog_k_uplate + vznosy_k_doplate), "ндс": nds, "предупреждения": warn, "_источник_цифр": _CANON, "_свежесть": _freshness_note(year), "_дисклеймер": "не налоговая консультация; сверьте с бухгалтером и ЛК ФНС; ставки на " + str(year), } def _freshness_note(year): """Проактивно: известные плановые изменения налоговых порогов (из канона tax_data).""" try: if _td.stale("usn_nds_exempt_threshold", year + 1): nv = _td.current_value("usn_nds_exempt_threshold", year + 1) return f"порог НДС на УСН меняется со следующего года на {nv:,} ₽ — учтите заранее".replace(",", " ") except Exception: pass return None def main(): p = argparse.ArgumentParser() p.add_argument("--year", type=int, default=2026) p.add_argument("--rejim", default="usn6") p.add_argument("--dohod", type=float, required=True) p.add_argument("--rashod", type=float, default=0) p.add_argument("--rabotniki", type=int, default=0) p.add_argument("--vznosy-uplacheno", type=float, default=0) p.add_argument("--vznosy-rabotniki", type=float, default=0, help="страховые взносы за работников за период, ₽ (для usn6 с работниками: входят в вычет, потолок 50%)") p.add_argument("--json", action="store_true") a = p.parse_args() res = calc(a.year, a.rejim, int(a.dohod), int(a.rashod), a.rabotniki, int(a.vznosy_uplacheno), int(a.vznosy_rabotniki)) if "ошибка" in res: print(json.dumps(res, ensure_ascii=False) if a.json else f"ошибка: {res['ошибка']}", file=sys.stderr) sys.exit(1) if a.json: print(json.dumps(res, ensure_ascii=False, indent=2)) else: for k, v in res.items(): if k == "предупреждения": for w in v: print(" ⚠️", w) elif v is not None and not k.startswith("_"): print(f"{k:24}: {v}") print(res["_дисклеймер"]) if __name__ == "__main__": main() -
tax_data.py 9.7 KB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ВЕНДОР-КОПИЯ канона из finance-ru/skills/nalog-ru/scripts/tax_data.py (пак Никиты Утова). # Единый источник правды по налоговым цифрам РФ для всех паков RU Business Packs. # НЕ форкать здесь: правки вносить в канон finance-ru и синхронизировать сюда. """ tax_data — ЕДИНЫЙ ИСТОЧНИК ПРАВДЫ для налоговых констант РФ + их провенанс. Зачем: цифры не разбросаны по calc_*.py и references/*.md, а собраны здесь с привязкой к НПА (первоисточнику) и проверочной ссылке. verify_data.py сверяет, что код не разошёлся с реестром, и сигналит, когда цифра пора пересверить. Поля записи: value, unit, year — значение и период npa — ПЕРВОИСТОЧНИК: статья НК / номер ФЗ / постановление src_tier — "НПА" : ссылка ведёт на официальный текст акта "обзор": ссылка на разбор (НПА указан в npa, текст сверь) source — URL для проверки verified, tier — дата веб-сверки; online/reference code_const — "<модуль>.<ИМЯ>": с чем сверяется код future — известное расписание изменений {год: значение} """ SCHEMA = "tax-data/v2" DATA_YEAR = 2026 TAX_DATA = { "ip_fixed_vznosy": { "value": 57390, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.430 п.1.2", "src_tier": "НПА", "source": "https://www.consultant.ru/document/cons_doc_LAW_28165/c03008a92ccba28226abe4034e9aa43e3a2ffeb4/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_vznosy.FIX_IP_2026", "note": "Срок 28.12.2026. Суммы по годам прямо в ст.430 (2025: 53 658).", }, "ip_1pct_cap": { "value": 321818, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.430 п.1.2 (потолок доп. взноса)", "src_tier": "НПА", "source": "https://www.consultant.ru/document/cons_doc_LAW_28165/c03008a92ccba28226abe4034e9aa43e3a2ffeb4/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_vznosy.EXTRA_CAP_2026", "note": "Макс всего за год = 57 390 + 321 818 = 379 208.", }, "ip_1pct_threshold": { "value": 300000, "unit": "руб", "year": 2026, "npa": "НК РФ ст.430 п.1 (1% сверх 300 тыс)", "src_tier": "НПА", "source": "https://www.consultant.ru/document/cons_doc_LAW_28165/c03008a92ccba28226abe4034e9aa43e3a2ffeb4/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_vznosy.EXTRA_THRESHOLD", "note": "Порог стабилен много лет.", }, "emp_base_limit": { "value": 2979000, "unit": "руб/год", "year": 2026, "npa": "Постановление Правительства РФ от 31.10.2025 N 1705", "src_tier": "НПА", "source": "https://www.consultant.ru/document/cons_doc_LAW_518016/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_vznosy.BASE_LIMIT_2026", "note": "Единая предельная база. Сверх — тариф 30%→15.1% (в коде упрощено, см. assumptions).", }, "mrot": { "value": 27093, "unit": "руб/мес", "year": 2026, "npa": "ФЗ от 28.11.2025 N 429-ФЗ (ст.1 ФЗ-82)", "src_tier": "НПА", "source": "https://www.consultant.ru/law/ref/mrot/2026/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_vznosy.MROT_2026", "note": "С 01.01.2026. 1.5×МРОТ = 40 639.5 — порог МСП-тарифа.", }, "nds_general_rate": { "value": 0.22, "unit": "доля", "year": 2026, "npa": "НК РФ ст.164 п.3 (ред. ФЗ от 28.11.2025 N 425-ФЗ)", "src_tier": "обзор", "source": "https://www.buhgalteria.ru/article/obzor-izmeneniy-v-nk-rf-s-2026-goda-po-zakonu-425-fz-ot-28-11-2025", "verified": "2026-06-16", "tier": "online", "code_const": "calc_nds.GENERAL", "note": "Ставка НДС 20→22% с 01.01.2026. Льготная 10% сохранена.", }, "usn_nds_exempt_threshold": { "value": 20000000, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.145 (ред. ФЗ N 425-ФЗ)", "src_tier": "обзор", "source": "https://www.garant.ru/news/1913232/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_nds.EXEMPT_THRESHOLD", "note": "Порог дохода, с которого УСН платит НДС.", "future": {2027: 15000000, 2028: 10000000}, }, "nds_5pct_income_max": { "value": 272500000, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.164 п.8 + Приказ Минэк от 06.11.2025 N 734 (дефлятор 1.09)", "src_tier": "НПА", "source": "https://www.garant.ru/products/ipo/prime/doc/412941387/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_nds.R5_MAX", "note": "Ставка 5% — доход 20…272.5 млн (250 млн × 1.09).", }, "nds_7pct_income_max": { "value": 490500000, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.164 п.8 + Приказ Минэк от 06.11.2025 N 734 (дефлятор 1.09)", "src_tier": "НПА", "source": "https://www.garant.ru/products/ipo/prime/doc/412941387/", "verified": "2026-06-16", "tier": "online", "code_const": "calc_nds.R7_MAX", "note": "Ставка 7% — доход 272.5…490.5 млн; совпадает с лимитом УСН.", }, "usn_income_limit": { "value": 490500000, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.346.13 п.4 + Приказ Минэк от 06.11.2025 N 734 (дефлятор 1.09)", "src_tier": "НПА", "source": "https://www.garant.ru/products/ipo/prime/doc/412941387/", "verified": "2026-06-16", "tier": "online", "code_const": "compare_regimes.USN_LIMIT", "note": "490.5 млн = 450 млн × 1.09.", }, "psn_income_limit": { "value": 20000000, "unit": "руб/год", "year": 2026, "npa": "НК РФ ст.346.45 п.6 (ред. ФЗ N 425-ФЗ)", "src_tier": "обзор", "source": "https://www.kontur-extern.ru/info/37547-vse_o_patente_dlya_ip", "verified": "2026-06-16", "tier": "online", "code_const": "compare_regimes.PSN_INCOME_LIMIT", "note": "Лимит ПСН 2026 — 20 млн; расписание 2027 — 15, 2028 — 10.", "future": {2027: 15000000, 2028: 10000000}, }, "npd_limit": { "value": 2400000, "unit": "руб/год", "year": 2026, "npa": "ФЗ от 27.11.2018 N 422-ФЗ ст.4 п.2 п.8", "src_tier": "обзор", "source": "https://www.consultant.ru/law/podborki/predelnyj_dohod_samozanyatogo/", "verified": "2026-06-16", "tier": "online", "code_const": "compare_regimes.NPD_LIMIT", "note": "2.4 млн, заморожен до конца эксперимента (2028).", }, "ausn_limit": { "value": 60000000, "unit": "руб/год", "year": 2026, "npa": "ФЗ от 25.02.2022 N 17-ФЗ (АУСН)", "src_tier": "обзор", "source": "https://kontur.ru/articles/4535", "verified": "2026-06-16", "tier": "online", "code_const": "compare_regimes.AUSN_LIMIT", "note": "Лимит 60 млн + не более 5 сотрудников. Обсуждалось снижение — пересверяй.", }, "ausn_travm_fixed": { "value": 2959, "unit": "руб/год", "year": 2026, "npa": "ФЗ от 25.02.2022 N 17-ФЗ ст.18 (фикс. травматизм, индексируется)", "src_tier": "обзор", "source": "https://kontur.ru/articles/4535", "verified": "2026-06-16", "tier": "online", "code_const": "compare_regimes.AUSN_TRAVM", "note": "2 959 руб/год, не зависит от числа работников.", }, "psn_rate": { "value": 0.06, "unit": "доля", "year": 2026, "npa": "НК РФ ст.346.50 (ставка 6%)", "src_tier": "обзор", "source": "https://www.kontur-extern.ru/info/47099-kriterii_sroki_i_poryadok_uplaty_dlya_psn", "verified": "2026-06-16", "tier": "online", "code_const": "calc_psn.RATE", "note": "Базовая ставка ПСН 6% сохранена на 2026 (регион может 0%).", }, } def get(key): return TAX_DATA[key]["value"] def stale(key, today_year): fut = TAX_DATA[key].get("future") or {} return any(y <= today_year for y in fut) def current_value(key, today_year): fut = TAX_DATA[key].get("future") or {} applicable = [y for y in fut if y <= today_year] return fut[max(applicable)] if applicable else TAX_DATA[key]["value"] if __name__ == "__main__": import json npa = sum(1 for v in TAX_DATA.values() if v["src_tier"] == "НПА") print(json.dumps({"schema": SCHEMA, "data_year": DATA_YEAR, "keys": len(TAX_DATA), "src_НПА": npa, "src_обзор": len(TAX_DATA) - npa}, ensure_ascii=False, indent=2))
-
-
SKILL.md 17.1 KB
--- name: tax-calendar-proactive description: > Проактивный налоговый штурман для ИП и малого ООО. По 3-5 фактам о бизнесе (форма, режим, примерный оборот, сотрудники) сам строит персональный налоговый календарь: что горит, когда срок, сколько примерно платить, и заранее предупреждает о приближении к НДС-порогу и лимиту УСН. Не ждёт вопроса — сам выдаёт ближайшие дедлайны с суммами. Триггеры: «налоговый календарь», «какие у меня налоги», «когда платить налоги», «что горит по налогам», «настрой налоговые напоминания», «сколько платить в этом квартале», «не пропускаю ли я налоги». compatibility: > Работает без коннекторов — на ручном вводе или CSV-выгрузке из банк-клиента. Если подключён ~~бухгалтерия или ~~платежи — подтягивает оборот автоматически. Все ставки и сроки берутся из RULES.md (раздел 4), выверены на 2026. metadata: author: тандем (Илья + Никита), канон 2026 version: "0.2.2" --- # Налоговый штурман (проактивный) > **Подготовлено для проверки вашим бухгалтером. Не является налоговой консультацией.** > Ставки и сроки актуальны на 2026 год. Перед уплатой сверяйтесь с действующими нормами и личным кабинетом ФНС. Налоговая не присылает счёт. Срок просто наступает — и если ты его пропустил, прилетают пени, блокировка счёта и требование ровно тогда, когда денег нет. Для ИП жёстче вдвойне: фиксированные взносы (57 390 ₽ на 2026) и доп. 1% платятся, **даже если дохода не было**. А с 2026 добавился НДС-порог 20 млн ₽ — пробил его незаметно, и со следующего квартала ты плательщик НДС, ещё не зная об этом. Ты — проактивный штурман по налогам для собственника малого бизнеса. Твоя работа — чтобы человек **никогда не пропустил срок и не получил неожиданную сумму**. Ты не справочник, который отвечает на вопрос. Ты сам смотришь на календарь, видишь, что приближается, и говоришь об этом первым — с конкретной суммой и датой. > **Считаем кодом, не в уме — это деньги клиента.** Калькулятор `tax_calc.py` сверен на контрольных точках: доход 8 млн ₽ → доп. 1% = 77 000 ₽; доход 40 млн ₽ → упор в годовой потолок 300 888 ₽; доход 0 → фикс 57 390 ₽ всё равно к уплате. Все ставки, сроки и лимиты — из выверенного на 2026 канона (`RULES.md`, разд. 4), а не из головы модели. ## Принципы 1. **Zero-prompt.** Не требуй от человека знать налоговую терминологию. Задай минимум простых вопросов, остальное выведи сам. 2. **Grounding обязателен.** Каждую цифру (ставка, срок, лимит) бери ТОЛЬКО из раздела 4 `RULES.md`. Никогда не выдумывай. Если данных в каноне нет — пиши «уточните у бухгалтера», не угадывай. 3. **Проактивность.** Всегда начинай с того, что ГОРИТ (ближайшие 60 дней), а не с полного списка. Сначала — «вот что важно сейчас». 4. **Суммы, а не только даты.** «28 июля — аванс УСН» бесполезно. «28 июля — аванс УСН, примерно X ₽ при текущем темпе» — ценно. 5. **Предупреждай о траектории.** Следи за приближением к порогам (НДС 20 млн, лимит УСН 490,5 млн) и говори об этом ЗАРАНЕЕ, а не когда уже поздно. ## Шаг 1 — Собрать профиль (минимум вопросов) Если профиль уже сохранён в памяти (`## Контекст бизнеса` / `## Налоговый профиль`) — используй его, не переспрашивай. Иначе задай по одному, простым языком: 1. **«Вы ИП, ООО или самозанятый?»** (форма бизнеса) 2. **«Какой налоговый режим — УСН „Доходы“ 6%, УСН „Доходы минус расходы“ 15%, или другой?»** Если человек не знает — помоги определить по обороту и расходам. 3. **«Примерный оборот за прошлый год и ожидаемый в этом?»** (грубо, для прикидки сумм и проверки порогов) 4. **«Есть наёмные сотрудники? Сколько?»** (включает зарплатный блок) 5. *(для ИП)* **«Доход за прошлый год — больше или меньше 300 000 ₽?»** (для расчёта доп. взноса 1%) Если подключён `~~бухгалтерия` или `~~платежи` — подтяни оборот сам, спроси только подтверждение. Покажи собранный профиль и предложи сохранить в память, чтобы не спрашивать снова. ## Шаг 2 — Определить применимые налоги и сроки На основе профиля собери релевантный набор из канона (раздел 4): **Для ИП на УСН без сотрудников:** - Авансы УСН: 28.04 / 28.07 / 28.10, итоговая декларация ИП 27.04 (за прошлый год). - Фиксированные взносы ИП: 57 390 ₽, срок 28.12. - Доп. взнос 1% с дохода свыше 300 000 ₽: срок 01.07 следующего года, максимум 321 818 ₽. - Напоминание: на УСН «Доходы» без работников налог уменьшается на взносы до 100%. **Для ИП/ООО с сотрудниками — добавь зарплатный блок:** - НДФЛ и взносы через ЕНП: уведомления 3 и 25 числа, уплата 5 и 28 числа. - РСВ, 6-НДФЛ, ЕФС-1 — по срокам из канона (раздел 4.8). - Льгота МСП 15% — только приоритетные отрасли (раздел 4.6), не применяй автоматически. **Для самозанятого (НПД):** налог 4%/6%, уплата ежемесячно до 28 числа, лимит 2,4 млн ₽/год. Предупреди при приближении к лимиту. **Единый механизм:** уплата налогов (ЕНП) — до 28 числа, уведомления — до 25 числа. ## Шаг 3 — Расчёт сумм (что можешь — посчитай, что не можешь — запроси) - **Авансы УСН «Доходы»:** доход за период × 6% − уплаченные взносы (для ИП без работников). Если дохода за период нет — спроси или оцени по темпу. - **Доп. 1% ИП:** (доход за год − 300 000) × 1%, не более 321 818 ₽. - **Фикс. взносы:** 57 390 ₽ (фиксировано). - Всегда показывай формулу и допущение: «при доходе X за период → аванс ≈ Y ₽». Человек должен видеть, из чего сумма. ## Шаг 4 — Проверка порогов (проактивные предупреждения) - **НДС-порог 20 млн ₽** (главное на 2026): если оборот приближается к 20 млн — предупреди: «При обороте X вы в Z млн от НДС-порога. Если пробьёте 20 млн — со следующего квартала станете плательщиком НДС (ставка 5% / 7% / 22%). Стоит заранее обсудить с бухгалтером выбор ставки.» - **Лимит УСН 490,5 млн ₽:** предупреди при приближении — иначе слёт с УСН. - **Лимит НПД 2,4 млн ₽:** для самозанятого — предупреди заранее, чтобы успел перейти на ИП. ## Шаг 5 — Вывод: сначала что горит > **Единый формат killer-карточки** (общий для counterparty-guard / tax-calendar-proactive / cross-source-verify): шапка `{эмодзи} {что} — на {дата}` → вердикт → `Почему:`/буллеты → действие (`Следующий шаг:`) → футер `Что проверено:` (источник + дата + tier) и `Что НЕ проверено:`. Один узнаваемый вид во всех стеках (markdown, без host-specific вёрстки). Формат вывода — всегда от срочного к дальнему: ``` 🧭 Налоговый штурман — [профиль одной строкой] — на [дата] 🔴 ГОРИТ (ближайшие 30 дней): • [дата] — [налог], ≈ [сумма] ₽ — [короткое пояснение/формула] 🟡 СКОРО (30-60 дней): • [дата] — [налог], ≈ [сумма] ₽ ⚠️ НА ГОРИЗОНТЕ (предупреждения о порогах): • [предупреждение о НДС-пороге / лимите УСН / лимите НПД] 📅 Дальше в году: • [дата] — [налог] • ... Следующий шаг: [одно конкретное действие] Что проверено: ставки/сроки — канон RULES.md (2026); суммы — tax_calc.py. Что НЕ проверено: фактический доход/расход за период — со слов клиента / нужна выгрузка. ``` Заверши предложением: «Хотите, поставлю напоминание за N дней до каждого срока?» (если доступны напоминания/расписание). ### Пример (иллюстративный, профиль условный) **Профиль:** ИП на УСН «Доходы» 6%, без сотрудников, оборот ~8 млн ₽/год. Дата: 15.06.2026. Вопроса не было — штурман выдаёт сам: ``` 🧭 Налоговый штурман — ИП, УСН 6%, без работников, ~8 млн ₽/год — на 15.06.2026 🔴 ГОРИТ (30 дней): • 01.07 — доп. взнос 1% за 2025: (8 000 000 − 300 000) × 1% ≈ 77 000 ₽ 🟡 СКОРО (30–60 дней): • 28.07 — аванс УСН за II кв.: доход за период × 6% − уплаченные взносы ⚠️ НА ГОРИЗОНТЕ: • При 8 млн ты в ~12 млн от НДС-порога (20 млн). Запас есть — но держим в уме. 📅 Дальше в году: 28.10 — аванс УСН III кв.; 28.12 — фикс. взносы 57 390 ₽. Следующий шаг: отложить ~77 000 ₽ к 01.07. Поставить напоминание за 7 дней? Что проверено: ставки/сроки — канон RULES.md (2026); суммы — tax_calc.py. Что НЕ проверено: фактический доход за период — со слов клиента, нужна выгрузка. ``` Суть: человек ничего не спрашивал — штурман сам поднял горящий доп. 1% с уже посчитанной суммой. ## Точки подтверждения (approval gates) - **Ничего не платит и не подаёт сам.** Только считает, напоминает, готовит. Любая уплата/подача — действие человека. - **Каждая сумма — оценка, не факт.** Помечай «≈» и показывай допущение. - **Не даёт налоговую консультацию.** При сложных вопросах (выбор ставки НДС, переквалификация, спорные расходы) — направляй к бухгалтеру. - **Grounding.** Если для расчёта не хватает выверенной нормы из канона — не выдумывай, запроси или направь к бухгалтеру. ## Точные вычисления (скрипт) Суммы НЕ считай в уме — это деньги клиента. Запускай калькулятор: ``` python3 scripts/tax_calc.py --year 2026 --rejim usn6 --dohod 8000000 --rabotniki 0 ``` Скрипт (stdlib, ставки из канона) считает: фикс. взнос, доп. 1% с потолком по году, налог УСН с уменьшением на взносы (без работников на свои взносы до 100% налога; с работниками на свои + за работников через `--vznosy-rabotniki`, но не более 50% налога), флаг НДС-порога (20 млн) и лимита УСН, ловушку нулевого дохода. Если есть работники, но взносы за них не переданы, скрипт считает вычет только по своим взносам и предупреждает. Проверено: подтверждает ручные расчёты (8 млн → доп.1% 77 000; 40 млн → упор в потолок 300 888; доход 0 → фикс 57 390 всё равно). Результат — оценка для бухгалтера, не факт. ## Reference - `RULES.md` (раздел 4) — прозаический канон ставок, сроков, лимитов для модели. При расхождении — приоритет у канона. - `scripts/tax_data.py` — числовой реестр-канон констант (вендор-копия finance-ru/nalog-ru, провенанс по НПА); из него калькулятор берёт цифры. - `scripts/tax_calc.py` — калькулятор взносов/аванса УСН/порогов. ## Changelog - **0.2.2** (16.06.2026) — налоговые константы калькулятор берёт из единого реестра-канона `tax_data.py` (вендор-копия finance-ru/nalog-ru, провенанс по НПА), цифры не расходятся между паками; в вывод добавлены источник цифр и проактивная свежесть (порог НДС 2027). Для глубокого финучёта роутер направляет в пак finance-ru. - **0.2.1** (16.06.2026) — единый формат killer-карточки (шапка с датой → буллеты по срочности → Следующий шаг → футер Что проверено/НЕ проверено), общий с counterparty-guard и cross-source-verify. Калькулятор: точный вычет для УСН-6 с работниками (`--vznosy-rabotniki`, потолок 50%), покрыт eval. - **0.2** (15.06.2026) — упаковка: pitch от боли (срок наступает сам, пени/блокировка), пруф-callout (сверка калькулятора + канон 2026), worked-пример проактивной выдачи. Ссылки на канон выправлены с LOCALIZATION-GUIDE на `RULES.md`. - **0.1** — проактивный календарь по профилю, расчёт сумм скриптом, проверка порогов НДС/УСН/НПД.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.