Odoo
МодульУкраїнські податкові ставки в Odoo
Як налаштувати account.tax для ПДВ 20%, 7%, 0%, без ПДВ і звільнення — і як зв'язати ставки з fiscal positions та tax tags декларації.
Що це і навіщо
Усе ПДВ-життя Odoo тримається на трьох речах: account.tax (сама ставка), account.fiscal.position (механізм підміни ставок) і tax_tags (як ставка лягає в декларацію). Налаштуй ці три правильно — інвойси, проводки, декларація і ПН складатимуться самі. Перекоси хоча б одне — суми попливуть, рядки не зійдуться, аудитор плакатиме.
З коробки l10n_ua дає базові ставки: 20%, 7%, 0% і без ПДВ. Але без правильних tax_repartition_lines, без fiscal positions під типові сценарії (експорт, звільнення за ст. 197, касовий метод) і без зв’язку з рядками декларації це просто декорація.
Як це працює
Кожна account.tax має:
name— назва, яку бачить бухгалтер.amount— ставка (20, 7, 0).type_tax_use— для продажів (sale), закупівель (purchase) чи обох (none).price_include— чи ставка вже сидить у ціні (для роздробу і фіскальних чеків — так).invoice_repartition_line_ids— куди йде сума, коли складають інвойс.refund_repartition_line_ids— куди йде сума при поверненні.
Структура repartition line:
# Для ПДВ 20% на продаж
tax_20.invoice_repartition_line_ids = [
# 100% база — у рядок 1.1 декларації
{'repartition_type': 'base', 'tag_ids': [(4, base_1_1_tag.id)]},
# 100% податок — на рахунок 6411 + рядок ПЗ декларації
{'repartition_type': 'tax', 'factor_percent': 100,
'account_id': acc_6411.id, 'tag_ids': [(4, vat_obligation_tag.id)]},
]
Тобто коли бухгалтер виставляє інвойс зі ставкою 20%, Odoo сам пише DR 361 / CR 703 на базу і DR 643 / CR 6411 на ПДВ та проставляє теги, які декларація потім збере.
Шлях у меню: Accounting → Configuration → Taxes.
У контексті українського обліку
Мінімальний набір ставок для виробничого підприємства:
| Ставка | Використання | Рахунок ПЗ | Рядок декларації |
|---|---|---|---|
| 20% продаж | Звичайна реалізація | 6411 | 1.1 |
| 20% закупівля | Звичайне придбання | 6442 / 644 | 10.1 |
| 7% продаж | Ліки, медвироби (ст. 193.2.5) | 6411 | 1.2 |
| 0% продаж | Експорт (ст. 195) | — | 2.1 |
| 0% продаж — оборонне | Постачання військовим (п.32 підрозд.2 розд.ХХ) | — | 3.2 |
| Без ПДВ продаж | Операції звільнені (ст. 197) | — | 3.1 |
| Без ПДВ — необ’єкт | Поза об’єктом ПДВ (ст. 196) | — | 5 |
| 0% закупівля — імпорт | Імпорт послуг від нерезидента (умовний продаж) | 6411 + 6442 | 11 |
Касовий метод (ст. 187.7, 187.10) — окрема історія, через tax_exigibility='on_payment'. Деталі — у Касовий метод.
Fiscal position — це проста мапа «ставка → ставка». Наприклад, fiscal position «Експорт»:
- замість «20% продаж» підставляє «0% продаж»;
- замість «7% продаж» — теж «0% продаж».
Прив’яжи fiscal position до партнера-нерезидента (поле res.partner.property_account_position_id) — і Odoo щоразу при створенні SO чи інвойсу сам перемкне ставки.
Як ми робимо (defense-контекст)
ТОВ «УкрПром-Тех» має такий набір ставок:
- 20% продаж / закупівля — стандарт для цивільних клієнтів.
- 0% продаж — експорт (з МД).
- 0% продаж — оборонне постачання (звільнення п.32 підрозд.2 розд.ХХ ПКУ для ВТП). Окремий tax record, бо в декларації йде у рядок 3.2, а не 2.1.
- Cash basis 20% — для деяких постачальників на касовому методі.
- Без ПДВ — операції з ОЕС/ОВТ (для специфічних видів продукції).
Fiscal positions:
- «Експорт» — для іноземних замовників. Підміняє 20%/7% → 0% (експорт).
- «Оборона — звільнення» — для постачання військовим частинам. Підміняє 20% → 0% (оборонне).
- «Касовий метод» — для окремих постачальників-комуналок. Підміняє стандартний 20% → 20% cash basis.
Усе це жорстко прив’язано до партнерів через автоматизацію: коли заводять нового партнера, server action перевіряє ЄДРПОУ і за класифікатором ставить потрібну fiscal position.
Типові граблі
- Налаштував tax_tag вручну, забув про refund_repartition. Інвойс іде з тегом, повернення — без. Через РК декларація не сходиться. Завжди заповнюй обидва repartition.
- Один tax record на 20% продаж і закупівлю. Здається економно, але
type_tax_use='none'дозволяє виставити цю ставку й на інвойсі купівлі. Бухгалтер ненароком вибере «вихідну» ставку для вхідного. Розділяй на два tax records. - Tax_tag з російської локалізації. Активуєш російський або кросслокалізаційний модуль — і раптом твої теги ведуть у російську декларацію. Контролюй, які
account.tax.report.lineзв’язано з твоїми ставками. price_include=Trueдля оптових інвойсів. Тоді сума інвойсу — це 1200, а база і ПДВ розбиваються самі. Для опту зазвичай хочемо «1000 + ПДВ = 1200» з повним контролем. Тобтоprice_include=False.- Fiscal position не спрацьовує. Перевір: 1) чи прив’язана вона до партнера; 2) чи у партнера саме та фіскальна позиція; 3) чи в
tax_mapцієї FP вказано точно ту tax-ID, що на продукті; 4) чи не заблокований SO/інвойс — після підтвердження зміна FP рядків уже не чіпає. - Експортний 0% і звільнення за ст. 197 з тим самим tax-ID. Так не можна. Дві окремі ставки, два окремі теги — один у рядок 2.1, інший у 3. Інакше декларація буде криво назавжди.
- Імпорт послуг від нерезидента без умовного продажу. За ст. 208 ПКУ ти маєш скласти ПН на себе. Забув — і податкового кредиту нема, а перерахунок потім болить.
Дотичне
- Fiscal Position — детально про механізм підміни
- l10n_ua — звідки беруться базові ставки
- Декларація ПДВ — як ставки лягають у декларацію
- Касовий метод — окрема історія касового методу
- ПН/РК — як ставка йде у ПН
- Перша подія — момент виникнення зобов’язання
Де цей модуль зустрічається10
- ГайдАвансовий звітПідзвітна особа отримала готівку на ПММ і запчастини. Як завести аванс на 372, прикріпити чеки в Expenses, офо…
- ГайдПерша вихідна ПНВиставляємо першу податкову накладну з Odoo, накладаємо КЕП і дотискаємо її в ЄРПН до 15-го календарного дня —…
- ГайдПерша зарплатаРозрахунковий лист на одного працівника від нуля: оклад, ЄСВ 22%, ПДФО 18%, військовий збір 5%, проводки на 66…
- OdooДекларація ПДВЯк зібрати декларацію з ПДВ з journal entries Odoo: рядки 1-21, додатки Д1-Д6, експорт у формат ДПС.
- OdooКасовий методЯк налаштувати tax_exigibility='on_payment' для постачальників ЗСУ (ст. 187.7) і комуналок (ст. 187.10). Wizar…
- OdooПН/РКЯк Odoo працює з податковими накладними: складання, реєстрація в ЄРПН, моніторинг статусу, типи причини та РК …
- OdooСЕА ПДВЯк в Odoo відстежувати ΣНакл — баланс електронного рахунку ПДВ, поповнювати його вчасно й не впиратися в ліміт…
- OdooFiscal PositionМеханізм, що автоматично підмінює ставки ПДВ і рахунки залежно від контрагента, валюти, сценарію. Без нього не…
- Odool10n_uaБазовий модуль адаптації Odoo до України: план рахунків, ПДВ-ставки, валюта, дати. Що в коробці є, а чого нема…
- ПДВПКПраво зменшити ПЗ на вхідний ПДВ — не від факту оплати, а від зареєстрованої в ЄРПН ПН і зв'язку придбання з г…