Перейти до основного контенту
База знань · виробничий облік USD41,42 ПДВ20% МЗП8 000

Реалізація · ПДВ · Середній

Fiscal Position на покупця-ЗСУ — звільнення «09» без ручних правок

Налаштовуємо в Odoo фіскальну позицію «Оборона-197.6», прив'язуємо її до військової частини й одразу отримуємо правильну ПН зі звільненням і тип причини «09» — без ручного перемикання ставок на кожному SO.

Час
20-25 хв
Модуль Odoo
Accounting → Configuration → Fiscal Positions; Contacts → Partner → Sales & Purchase
Читання
~7 хв
  • fiscal position
  • ПДВ
  • звільнення
  • 197.6
  • ЗСУ
  • оборона

Ви постачаєте товар військовій частині, і це постачання звільнене від ПДВ за ст. 197.6. Перемикати ставку руками на кожному замовленні — дорога до помилок: рано чи пізно хтось забуде, і ПН піде з 20% замість звільнення. Тут ми один раз налаштуємо фіскальну позицію, прив’яжемо її до контрагента — і Odoo сам підставлятиме звільнення та тип причини «09» на кожному SO. Менше ручної роботи, менше шансів помилитися у звітності.

Результат

Партнер «Військова частина А-1234» має призначену фіскальну позицію «Оборона-197.6». Будь-який новий sale.order на цього контрагента автоматично підставляє ставку «Без ПДВ — звільнено за ст. 197.6», на згенерованому інвойсі заповнюється l10n_ua_pn_reason_code='09', а в декларації обсяг лягає у рядок 5 (звільнені постачання), не в рядок 1.1. Бухгалтеру не доводиться щоразу руками перемикати податок — fiscal position робить це автоматично і пам’ятає про теги декларації.

Передумови

  • Перша ПН вже виставляється з Odoo (див. Перша вихідна ПН).
  • Підписаний договір зі ЗСУ або з військовою частиною за Сила законуЗУ 808-IX (Прозоро.МО чи прямий договір під час воєнного стану за Постановою КМУ №1275).
  • Товар входить до переліку КМУ №224 товарів оборонного призначення — це передумова для застосування звільнення за ПКУ ст. 197.6.
  • В Odoo заведений res.partner військової частини з ЄДРПОУ (або умовним кодом А-XXXX) і ознакою «бюджетна установа».
  • Створено податок «Без ПДВ — звільнено 197.6» (account.tax з amount=0, type_tax_use='sale', тегами для рядка 5 декларації).
  • Розуміння того, що звільнення — не нульова ставка. ПК на матеріали доведеться компенсувати через ПКУ ст. 198.5 або розподілити за ПКУ ст. 199.

Як це зробити

1. Створіть фіскальну позицію

Фіскальна позиція — це набір правил, за якими Odoo підмінює податки й рахунки для певних контрагентів. Почнемо з порожньої.

Accounting → Configuration → Fiscal Positions → New. Поля:

  • NameОборона-197.6 (постачання ЗСУ). Назва осмислена, бо у звітах бачитимете саме її.
  • Country — лишаємо порожнім (Україна, бо постачання внутрішнє).
  • Detect Automatically — поки що не вмикаємо. Auto-apply за країною спрацює на всіх українських партнерів і поламає інші продажі.
  • Notes — короткий запис: «Застосовується до постачання за переліком КМУ №224 для ЗСУ і прирівняних формувань. Тип причини ПН — 09. Потребує компенсуючих ПЗ за 198.5/199.»

2. Додайте мапінг податків

Вкладка Tax Mapping. Натисніть Add a line і заповніть:

Tax on ProductTax to Apply
20% продажБез ПДВ — звільнено 197.6
7% продажБез ПДВ — звільнено 197.6
14% продажБез ПДВ — звільнено 197.6

Якщо у вас є кастомні ставки (наприклад, 20% продаж — defense-аналітика), додайте і їх. Правило: будь-яка ставка продажу 20/7/14 → звільнення. Закупівельні ставки не чіпаємо — вхідний ПК ми обробляємо окремо через компенсуючі ПЗ.

3. Додайте мапінг рахунків (опційно, але рекомендую)

Вкладка Account Mapping:

Account on ProductAccount to Use
701 Дохід від реалізації7012 Дохід від реалізації — оборонне замовлення
901 Собівартість реалізованої продукції9012 Собівартість — оборонне замовлення

Це дає реальну рентабельність оборонних контрактів окремо у P&L, без аналітичних танців. На рівні journal items усе ляже на потрібні субрахунки.

4. Збережіть і прив’яжіть до партнера

Збережіть позицію. Відкрийте Contacts → Військова частина А-1234, вкладка Sales & Purchase. У полі Fiscal Position виберіть Оборона-197.6 (постачання ЗСУ).

Прив’язку видно на формі партнера у полі property_account_position_id. Це властивість компанії (тобто діє в межах вашої company у multi-company середовищі) — потрібно повторити для кожної компанії, якщо їх кілька.

5. Перевірте на тестовому SO

Створіть sale.order на цього партнера. Додайте продукт зі стандартною ставкою «20% продаж». Збережіть. Подивіться на колонку Taxes у рядку:

  • Має стояти Без ПДВ — звільнено 197.6, не 20% продаж.
  • У підсумку SO має бути 0 ПДВ.
  • На поле fiscal_position_id SO має бути автозаповнене з партнера.

Якщо ставка не змінилася — отже, в мапінгу tax_src_id не збігається з податком, що стоїть на продукті. Звіряйте за ID, а не за назвою: у базі може існувати кілька «20% продаж» з різними id.

6. Підтвердьте інвойс і простежте за ПН

Згенеруйте інвойс із SO. На account.move:

  • Рядки автоматично з податком «Без ПДВ — звільнено 197.6».
  • На формі ПН/ЄРПН значення l10n_ua_pn_reason_code09. Якщо у вашому модулі це поле не виставляється автоматично, додайте серверне правило: при fiscal_position_id.name ilike 'Оборона-197.6' ставити 09.
  • Обсяг постачання потрапляє в рядок 5 декларації (звільнені постачання), не в рядок 1.1.

Підпишіть КЕП і надішліть до ЄРПН. Реєстрація — за тими самими 15 календарними днями (ПКУ ст. 201.10); звільнення від ПДВ не звільняє від реєстрації.

7. Нарахуйте компенсуючі ПЗ на матеріали

Це окремий крок наприкінці місяця, який часто забувають. На вартість матеріалів і послуг, що пішли у звільнене постачання, потрібно нарахувати компенсуючі ПЗ за ПКУ ст. 198.5 п. «г».

Проводка:

Дт 949 / Кт 6415 — 120 000 ₴ · компенсуючі ПЗ за матеріалами на оборонне постачання, ст. 198.5 п. «г»

В Odoo це робиться через окремий wizard l10n_ua.compensating_vat (якщо встановлений) або ручною journal entry в журналі «Різне». Підставою буде зведена ПН на власне підприємство з типом причини «09» і ознакою «компенсуючі ПЗ».

Перевірка

  • Тест-SO на цивільного партнера — нічого не змінилося, ставка лишається 20%. Це підтверджує, що fiscal position діє локально, а не на всю систему.
  • Тест-SO на військову частину — ставка автоматично перемикається на «Без ПДВ — звільнено», в інвойсі сума ПДВ = 0.
  • Аналітика P&L — після проведення інвойсу дохід ліг на субрахунок 7012, а не 701. Якщо ні — перевірте Account Mapping.
  • ПН у ЄРПН — тип причини «09», обсяг постачання у звільнених рядках. Квитанція №2 з фіскальним номером.
  • Декларація з ПДВ за місяць — рядок 5 містить обсяг постачання ЗСУ. Рядок 4.1 містить компенсуючі ПЗ за 198.5 на матеріальну частину.
  • Сальдо 6415 після всіх проводок: компенсуючі ПЗ нараховані, навіть якщо за самим постачанням ПЗ нульове.

Якщо щось пішло не так

Ставка не підставилась. На партнері справді стоїть позиція, але SO підтягнув стандартні 20%. Причини: (1) на продукті встановлена кастомна ставка 20% продаж — defense, якої немає в мапінгу — додайте її; (2) SO був створений до того, як ви прив’язали FP — на існуючих рядках треба перевибрати продукт або скористатися кнопкою Recompute Taxes на інвойсі.

Auto-apply увімкнули — все зламалось. Якщо випадково увімкнули Detect Automatically і не вказали ані країну, ані групу — позиція почала підставлятися на всіх. Швидкий фікс: вимкніть auto-apply на цій позиції, перевиставте FP вручну на справді оборонних партнерах. Для існуючих SO у статусі draft зробіть Recompute Taxes.

ПН пройшла зі ставкою 20%, не з «09». Не спрацював код причини. Перевірте, що для вашого модуля fiscal position тригерить l10n_ua_pn_reason_code='09'. Якщо такого правила немає — додайте server action на account.move._post(): якщо fiscal_position_id.l10n_ua_reason_code заповнений, копіювати його у поле причини. На вже зареєстровану ПН доведеться скласти РК зі знаком мінус (код 301) і нову правильну ПН.

Забули компенсуючі ПЗ. Аудитор знайде це першим. На камеральній — донарахування ПЗ за 198.5, штраф за ПКУ ст. 123, пеня. Якщо помітили самі до перевірки — самостійно подайте уточнюючий розрахунок за період звільненого постачання з нарахуванням компенсуючих ПЗ. Штраф у такому разі — 3% від суми (самостійне виявлення), а не 25%.

На партнері кілька fiscal positions. Одна для ВТП-експорту, друга для постачання ЗСУ. Це нормально, але в Odoo на партнері можна вказати лише одну property_account_position_id. Виходи: (1) поділіть на двох контрагентів (рідко доцільно); (2) лишайте на партнері основну позицію, на окремих SO вручну змінюйте на іншу.

Дотичне