Odoo
МодульCash Basis Tax — касовий метод ПДВ у Odoo
Як налаштувати tax_exigibility='on_payment' для постачальників ЗСУ (ст. 187.7) і комуналок (ст. 187.10). Wizard для ПН на дату платежу.
Що це і навіщо
Стандартне правило ПДВ — перша подія (ПКУ 187.1). Що раніше відбулося: відвантаження чи оплата — на ту дату нараховуємо. Але є винятки, де ПДВ йде тільки за касовим методом — на дату фактичного платежу. Це:
- Стаття 187.7 ПКУ — постачання Збройним Силам, СБУ, МВС та іншим силовим за державним оборонним замовленням.
- Стаття 187.10 ПКУ — комунальні послуги населенню, теплопостачання, водопостачання.
Логіка проста: касовий метод захищає постачальника від касового розриву — коли ПДВ уже нараховано, а грошей ще немає. Для оборонки і комуналки, де платежі затримуються на місяці, це рятує від сплати податку зі свого.
Отже, ПДВ-зобов’язання і ПДВ-кредит виникають на дату руху грошей, а не на дату документа. У Odoo за це відповідає механізм Cash Basis Taxes.
Як це працює
На account.tax є два поля для касового методу:
tax_exigibility = 'on_payment'(замість стандартногоon_invoice).cash_basis_transition_account_id— рахунок-транзит, на якому «висить» ПДВ, поки немає платежу.
Що відбувається, коли складаєте інвойс зі ставкою cash basis 20%:
- Створюється
account.move(інвойс). Сума 100 + 20 ПДВ = 120. - Проводки base: DR 361 / CR 703 на 100 (база — звичайна).
- Проводки tax (відстрочена): DR 643 / CR транзит-рахунок 6442 на 20 (а не на 6411). Тобто ПЗ ще не нараховано.
- На інвойсі стан = posted, але tax_amount у декларацію не йде (бо
tax_exigibility=on_payment).
Коли реєструєте платіж:
- Створюється
account.paymentі реконсилиться з інвойсом. - Odoo автоматично запускає cash basis adjustment — окремий журнальний запис.
- Цей запис: DR 6442 (транзит) / CR 6411 (реальний ПЗ) на 20. Тепер ПДВ потрапить у декларацію за період платежу.
# Налаштування cash basis на новій ставці
cash_basis_tax = self.env['account.tax'].create({
'name': 'ПДВ 20% — касовий метод',
'amount': 20,
'type_tax_use': 'sale',
'tax_exigibility': 'on_payment',
'cash_basis_transition_account_id': transit_account.id,
})
Шлях у меню: Accounting → Configuration → Taxes → відкрити tax → Advanced Options → Cash Basis.
У контексті українського обліку
Що треба налаштувати для cash basis з нуля:
- Рахунки транзиту. Зазвичай це 6442 для відстроченого зобов’язання і 6443 для відстроченого кредиту. Українські бухгалтери їх називають «643 — Податкові зобов’язання» (відстрочене) і «644 — Податковий кредит» (відстрочений). Створи їх, якщо їх ще немає.
- Окремі tax records.
- «ПДВ 20% касовий — продаж» з
tax_exigibility='on_payment'іcash_basis_transition_account_id=6442. - «ПДВ 20% касовий — закупівля» з аналогічними налаштуваннями для 6443.
- «ПДВ 20% касовий — продаж» з
- Fiscal positions.
- «Касовий метод — продаж ЗСУ» (підміняє звичайні ставки касовими для замовників-військових).
- «Касовий метод — закупівля комуналки» (підміняє вхідні).
- Прив’язка fiscal position до партнерів. Військові частини, комуналки.
- Дата складання ПН. За касовим методом ПН складається на дату платежу, а не на дату відвантаження. У Odoo для цього потрібна окрема логіка:
- Або вручну: отримали платіж — натискаєте кнопку «Скласти ПН».
- Або server action: на post payment → автоматично створити ПН з типом причини 14.
Як ми робимо (defense-контекст)
ТОВ «УкрПром-Тех» працює з касовим методом ось так:
Сценарій 1: продаж військовій частині за оборонним замовленням (ст. 187.7).
Партнер «Військова частина А-1234» має fiscal position «Касовий — продаж 187.7». При створенні SO Odoo підставляє ставку «ПДВ 20% касовий — продаж». Інвойс підтверджуємо — ПЗ висить на 6442. Якщо це звичайне відвантаження, ПН поки не складаємо.
Військова частина платить (часто через 30-60 днів після прийняття). При реєстрації платежу:
- Cash basis adjustment: 6442 → 6411.
- Server action: створюється ПН з типом причини 14 (постачання за касовим методом), дата складання = дата платежу.
- ПН реєструється в ЄРПН.
- ПН потрапляє у декларацію за період платежу.
Якщо платіж надходить частково — створюється кілька ПН на кожну частину.
Сценарій 2: купівля комунальних послуг (ст. 187.10).
«ЛКП Тепловодоканал» має fiscal position «Касовий — закупівля 187.10». Отримали Bill — ПК висить на 6443. Платимо комуналці — cash basis adjustment 6443 → 6442 (наш ПК). Чекаємо ПН від постачальника — звіряємо суму.
Два моменти. По-перше, cash basis adjustment не залежить від наявності вхідної ПН — це окрема логіка ПК. По-друге, реальний ПК потрапляє до декларації тільки тоді, коли постачальник зареєстрував вхідну ПН в ЄРПН. Це окрема перевірка через моніторинг реєстру.
Типові граблі
- Один tax record, два режими. Хотіли як «звичайний 20% за замовчуванням, але якщо партнер військовий — касовий». Не вийде. Cash basis — це окремий tax record. Підміна через fiscal position.
cash_basis_transition_account_idне заданий. Adjustment не пройде, ПДВ висить на 643/644 назавжди. Декларація буде сильно занижена. При створенні cash basis tax — це обов’язково.- Дата ПН ≠ дата платежу. Стандартно
account.move-інвойс має дату документа. Cash basis adjustment теж створює move з датою платежу. Але ПН для ЄРПН треба скласти руками з правильною датою. Якщо забув — складаєш пізнішою датою, у ЄРПН все одно проходить, але аудитор бачить. - Частковий платіж. Заплатили 50 з 120. Cash basis adjustment робить пропорційно: 5 з 10 (а не 20 — це тільки база, бо ПДВ сидить усередині суми). Якщо складається ПН — теж на пропорційну суму. Перевір, чи бухгалтер це розуміє.
- Сторно платежу. Зробили reverse payment. Cash basis adjustment теж сторнується. Якщо вже зареєстрували ПН — потрібно скласти РК. Не забути.
- Fiscal position змінила tax, але не на cash basis. Підставила «звичайний 20%» замість «касового 20%». Тоді нараховуєш на дату інвойсу — і весь сенс касового методу втрачено. Перевір саме
tax_dest_idуaccount.fiscal.position.tax. - ПК комуналки тягнеться без ПН. Заплатили, cash basis adjustment пройшов — і ПК потрапив у декларацію. Але ПН від комуналки ще не зареєстрована в ЄРПН. За ст. 198.6 ПКУ право на ПК виникає тільки після реєстрації. Тому до cash basis треба додати ще одну перевірку: чи зареєстрована вхідна ПН, перш ніж включати її в декларацію.
Дотичне
- Податки UA — налаштування звичайних ставок
- Fiscal Position — підміна ставок для конкретного партнера
- ПН/РК — складання ПН за касовим методом
- Декларація ПДВ — як cash basis впливає на декларацію
- Касовий метод — касовий метод нормативно
Де цей модуль зустрічається5
- ГайдКасовий 187.7Налаштовуємо в Odoo сценарій, де ПЗ за постачанням бюджетним установам (в/ч, ДОТ, МО) виникає на дату надходже…
- OdooПН/РКЯк Odoo працює з податковими накладними: складання, реєстрація в ЄРПН, моніторинг статусу, типи причини та РК …
- OdooПодатки UAЯк налаштувати account.tax для ПДВ 20%, 7%, 0%, без ПДВ і звільнення — і як зв'язати ставки з fiscal positions…
- OdooAccountingЯк Odoo веде подвійний запис: account.move як універсальний документ-проводка, журнали як шафи, account.move.l…
- OdooFiscal PositionМеханізм, що автоматично підмінює ставки ПДВ і рахунки залежно від контрагента, валюти, сценарію. Без нього не…