Plan kont
W Odoo są dostępne definicje planu kont dla różnych krajów. Każde konto ma swój numer (code), opis i typ. Dostępne typy kont można wyświetlić otwierając widok account.account.type.tree (zob. moduł Ustawienia w trybie deweloperskim – Debug | Otwórz widok). W bazie danych spis ten zawarto w tabeli account_account_type
. Są to:
Opis typu konta | Opis po angielsku | Grupa | Referencje |
---|---|---|---|
Należności | Receivable | Należności (receivable) | data_account_type_receivable |
Zobowiązania | Payable | Zobowiązania (payable) | data_account_type_payable |
Bank i gotówka | Bank and Cash | Gotówkowe (liquidity) | data_account_type_liquidity |
karta kredytowa | Credit Card | Gotówkowe | data_account_type_credit_card |
Bieżące aktywa | Current Assets | Normalny (other) | data_account_type_current_assets |
Aktywa trwałe | Non-current Assets | Normalny | data_account_type_non_current_assets |
Przedpłaty | Prepayments | Normalny | data_account_type_prepayments |
Środki trwałe | Fixed Assets | Normalny | data_account_type_fixed_assets |
Bieżące zobowiązania | Current Liabilities | Normalny | data_account_type_current_liabilities |
Zobowiązania długoterminowe | Non-current Liabilities | Normalny | data_account_type_non_current_liabilities |
Kapitał własny | Equity | Normalny | data_account_type_equity |
Inny dochód | Other Income | Normalny | data_account_type_other_income |
Przychód | Income | Normalny | data_account_type_revenue |
Amortyzacja | Depreciation | Normalny | data_account_type_depreciation |
Wydatki | Expenses | Normalny | data_account_type_expenses |
Koszt przychodu | Cost of Revenue | Normalny | data_account_type_direct_costs |
Ostatnia kolumna zawiera referenacje (id) do obiektu w bazie danych (ir.model.data). Pochodzą one z modelu account – pełna nazwa zawiera więc przedrostek account. (na przykład account.data_account_type_credit_card
).
Zapytanie do bazy danych zwracające te dane:
select aat.id, aat.name, aat.type, irmd.name as ref
from account_account_type aat, ir_model_data irmd
where (aat.id=irmd.res_id) and (irmd.name like '%account_type%')
and (irmd.module='account')
and (irmd.model='account.account.type')
order by aat.name;
Własne typy kont mogą być zdefiniowane jedynie w ramach definicji planu kont.
Na przykład standardowy plan dostępny dla Polski (l10n_pl) zawiera definicje:
- Podatki (account_type_tax)
- Rozrachunki (account_type_settlement)
- Pozabilansowe (account_type_nonbalance)
Dodatkowo każde konto może być opisane znacznikami (tagami).
Definiowanie własnego planu kont
Konta można zmieniać w parametrach systemu. Możemy także przygotować odrębny moduł zawierający kompletne dane o planie kont (alternatywę dla l10n_pl). Definicje możemy zawrzeć w plikach XML (z rekordami do odpowiednich modeli), albo w pliku csv. Warto przejrzeć ten opis choćby po to, by zdawać sobie sprawę z rodzaju powiązań między obiektami planu kony.
1) Najpierw ustalamy nazwę planu kont i pliki w jakich zawrzemy definicję. Plan nazwiemy demo_chart_template. Pliki w których go przygotujemy opisano jako fragment manifestu:
'data': [
'data/demo_chart_template.xml', # definicja planu
'data/account.account.template.csv', # definicja kont
'data/account_chart_template_data.xml', # definicje parametrów dla tabeli (chart) kont
'data/account_tax_template_data.xml', # definicje podatków
'data/account_chart_template_data.yml' # procedura wczytania tabeli podatków
],
2) Ustalmy typy kont jakie chcemy obsłużyć. Jak wyżej wspomniano autor polskiego planu zdecydował się zdefiniować trzy własne typy. Przykład dla jednego z nich (dla podatków):
<recordmodel=account.account.typeid=account_type_tax>
<fieldname=name>Podatki</field>
</record>
W naszym przykładzie zrezygnujmy z definiowania własnych typów.
3) Definiujemy plan kont (plik demo_chart_template.xml
)
<!-- definiujemy jedno - które potrzebujemy użyć w definicji planu kont-->
<record id="pl_11_0" model="account.account.template">
<field name="code">11-0</field>
<field name="reconcile" eval="True"/>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="name">Środki pieniężne w drodze</field>
</record>
<!-- zasadnicza definicja planu -->
<record id="demo_chart_template" model="account.chart.template">
<field name="name">Prosty plan kont dla Polski</field>
<field name="code_digits">6</field>
<field name="currency_id" ref="base.PLN"/>
<field name="bank_account_code_prefix">13-0</field>
<field name="cash_account_code_prefix">10-0</field>
<field name="transfer_account_id" ref="pl_11_0"/>
</record>
<!-- uzupełnienie powyższej definicji konta 11-0 -->
<record id="pl_11_0" model="account.account.template">
<field name="chart_template_id" ref="demo_chart_template"/>
</record>
Konta mogą być definiowane w plikach XML lub CSV (zob. dalej). Tu zdecydowaliśmy się na CSV, ale kod jednego konta (pieniądze w drodze) musi być użyty w definicji planu – stąd powyższa „sztuczka”.
4) Definiujemy pozostałe konta (plik account.account.template.csv
).
Użycie pliku CSV jest prostsze – bo można go edytować arkuszem kalkulacyjnym.
UWAGA! Nazwa pliku musi zawierać nazwę modelu do którego wczytujemy (tu:account.account.template
).
Każde konto musi zawierać:
- id – nadawany przez nas identyfikator
- chart_template_id:id – identyfikator definiowanego planu (demo_chart_template)
- code – kod, czyli tradycyjny numer konta
- name – nazwa konta dla księgowych
- user_type_id:id – typ konta o którym mowa wyżej (jeśli z modułu account – dpdajemy przedrostek)
- reconcile – czy jest to konto rozrachunkowe (rozrachunki, rozliczenie zakupu)
Przykład dla jednego konta:
id | pl_01_0 |
---|---|
chart_template_id:id | demo_chart_template |
code | 01-0 |
name | Środki Trwałe |
user_type_id:id | account.data_account_type_non_current_assets |
reconcile | FALSE |
Cały plan kont z pominięciem kolumnid
, oraz chart_template_id:id
(jednakowa watość dla wszystkich kont):
code | name | user_type_id:id | reconcile |
---|---|---|---|
01-0 | Środki Trwałe | account.data_account_type_non_current_assets | FALSE |
02-0 | Wartości niematerialne i prawne | account.data_account_type_non_current_assets | FALSE |
07-0 | Odpisy umorzeniowe środków trwałych | account.data_account_type_depreciation | FALSE |
07-1 | Odpisy umorzeniowe wartości niematerialnych i prawnych | account.data_account_type_depreciation | FALSE |
10-0 | Środki pieniężne w kasie | account.data_account_type_liquidity | FALSE |
12-0 | Inne środki pieniężne | account.data_account_type_liquidity | FALSE |
13-0 | Rachunek bieżący w banku | account.data_account_type_liquidity | FALSE |
20-0 | Rozrachunki z odbiorcami | account.data_account_type_receivable | TRUE |
20-1 | Rozrachunki z dostawcami | account.data_account_type_payable | TRUE |
22-0 | Rozrachunki z urzędem skarbowym | account.data_account_type_payable | TRUE |
22-1 | Rozrachunki publicznoprawne z ZUS | account.data_account_type_payable | TRUE |
22-9 | Pozostałe rozrachunki publicznoprawne | account.data_account_type_payable | TRUE |
23-0 | Rozrachunki z pracownikami | account.data_account_type_payable | TRUE |
24-0 | Pozostałe rozrachunki | account.data_account_type_payable | TRUE |
30-0 | Rozliczenie zakupu | account.data_account_type_current_assets | TRUE |
33-0 | Towary | account.data_account_type_current_assets | FALSE |
40-0 | Koszty według rodzajów i ich rozliczenie | account.data_account_type_expenses | FALSE |
40-1 | Zużycie materiałów i energii | account.data_account_type_expenses | FALSE |
40-2 | Usługi obce | account.data_account_type_expenses | FALSE |
40-3 | Podatki i opłaty | account.data_account_type_expenses | FALSE |
40-4 | Wynagrodzenia i narzuty | account.data_account_type_expenses | FALSE |
40-5 | Amortyzacja | account.data_account_type_expenses | FALSE |
40-6 | Pozostałe koszty rodzajowe | account.data_account_type_expenses | FALSE |
49-0 | Rozliczenie kosztów | account.data_account_type_expenses | FALSE |
60-0 | Produkty i rozliczenia międzyokresowe | account.data_account_type_current_assets | FALSE |
70-0 | Przychody ze sprzedaży | account.data_account_type_revenue | FALSE |
70-1 | Koszt własny sprzedaży | account.data_account_type_direct_costs | FALSE |
75-0 | Przychody finansowe | account.data_account_type_revenue | FALSE |
75-1 | Koszty finansowe | account.data_account_type_direct_costs | FALSE |
76-0 | Pozostałe przychody operacyjne | account.data_account_type_revenue | FALSE |
76-1 | Pozostałe koszty operacyjne | account.data_account_type_direct_costs | FALSE |
77-0 | Zyski nadzwyczajne | account.data_account_type_revenue | FALSE |
77-1 | Straty nadzwyczajne | account.data_account_type_direct_costs | FALSE |
80-0 | Fundusz podstawowy | account.data_account_type_equity | FALSE |
86-0 | Wynik finansowy | account.data_account_type_equity | FALSE |
87-0 | Obciążenia wyniku finansowego | account.data_account_type_equity | FALSE |
5) Definiujemy jak ma się plan kont zachowywać w Odoo (plik account_chart_template_data.xml
). Sama definicja kont nie wystarczy. Trzeba dodać im własności w systemie Odoo. Dzięki temu system będzie na przykład wiedział gdzie zaksięgować przychody ze sprzedaży (property_account_income_categ_id
).
W naszym przykładzie:
<record id="demo_chart_template" model="account.chart.template">
<field name="property_account_receivable_id" ref="pl_20_0"/>
<field name="property_account_payable_id" ref="pl_20_1"/>
<field name="property_account_expense_categ_id" ref="pl_30_0"/>
<field name="property_account_income_categ_id" ref="pl_70_0"/>
</record>
Własności te są pamiętane jako parametry firmy (ir.property
): Ustawienia --> Techniczne--> Parametry-->Własności firmy
6) Definicja podatków (account_tax_template_data.xml
).
Definicja składa się z dwóch części:
- definicji znaczników (tag) używanych do oznaczenia podatków jakie mają być naliczone (account.account.tag)
- zasadniczej definicji sposobu naliczania dla każdego znacznika (account.tax.template).
Przykład dla podatku VAT w przypadku zwolnienia z niego:
<record id="demo_tag_sale_vat" model="account.account.tag">
<field name="name">Sprzedaż towarów/usług, kraj, zwolnione</field>
<field name="applicability">taxes</field>
</record>
<record id="vat_s_zw" model="account.tax.template">
<field name="chart_template_id" ref="demo_chart_template"/>
<field name="name">Zwolniony z VAT</field>
<field name="description">VZW</field>
<field name="amount">0</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="tag_ids" eval="[(6,0,[ref('demo_chart .demo_tag_sale_vat')])]"/>
</record>
7) Ostatnim krokiem jest zdefiniowanie w języku YAML (https://pl.wikipedia.org/wiki/YAML) obiektu powodującego ustawienia planu kont dla aktualnej firmy (plik account_chart_template_data.yml
):
-
!python {model: account.chart.template, id: demo_chart_template}: |
self[0].try_loading_for_current_company()
Możemy już tak przygotowany plan zainstalować – po ewentualnym uprzednim odinstalowaniu planu standardowego (l10n_pl
).
UWAGA!
- Wczytanie planu kont powoduje ustawienie wzorców (account.tax.template), ale tabela podatktów (account.tax) zostanie uzupełniona tylko wtedy, gdy po raz pierwszy wczytamy plan kont (do nowej bazy). W przeciwnym przypadku trzeba wykonać aktualizację (moduł https://www.odoo.com/apps/modules/10.0/account\_chart\_update/ lub e14p).
- Znaczniki podatków (tag) nie są przypisane do planu. Trzeba zatem albo stosować wspólne, albo zadbać o różne nazwy.
Zob. też: https://www.odoo.com/slides/slide/how-to-adapt-odoo-accounting-to-your-own-country-464/pdf_content