بومی‌سازی حسابداری

هشدار

این آموزش به دانش دربارهٔ نحوهٔ ساخت یک ماژول در Odoo نیاز دارد (نگاه کنید به Server framework 101).

روند نصب

هنگام نصب ماژول account، ماژول بومی‌سازی متناظر با کد کشور شرکت به‌صورت خودکار نصب می‌شود. در صورتی که کد کشور تعیین نشده باشد یا ماژول بومی‌سازی یافت نشود، ماژول بومی‌سازی l10n_generic_coa (آمریکا) به‌صورت پیش‌فرض نصب می‌شود. برای جزئیات بیشتر post init hook را بررسی کنید.

برای مثال، اگر شرکت Switzerland را به‌عنوان کشور داشته باشد، l10n_ch نصب خواهد شد.

ساخت یک ماژول بومی‌سازی

ساختار یک ماژول پایهٔ l10n_XX را می‌توان با فایل __manifest__.py زیر توصیف کرد:

{
    "name": "COUNTRY - Accounting",
    "version": "1.0.0",
    "category": "Accounting/Localizations/Account Charts",
    "license": "LGPL-3",
    "depends": [
        "account",
    ],
    "data": [
        "data/other_data.xml",
        "views/xxxmodel_views.xml",
    ],
    "demo": [
        "demo/demo_company.xml",
    ]
}

درخت کاری شما باید به این شکل باشد

l10n_xx
├── data
│   ├── template
│   │   ├── account.account-xx.csv
│   │   ├── account.group-xx.csv
│   │   └── account.tax.group-xx.csv
│   └── other_data.xml
├── views
│   └── xxxmodel_views.xml
├── demo
│   └── demo_company.xml
├── models
│   ├── template_xx.py
│   └── __init__.py
├── __init__.py
└── __manifest__.py

در فایل اول models/template_xx.py، نام چارت حساب‌ها را به همراه برخی فیلدهای پایه تعیین می‌کنیم.

همچنین ببینید

مراجع قالب چارت

چارت حساب‌ها

برچسب‌های حساب

همچنین ببینید

مراجع برچسب حساب

برچسب‌ها راهی برای مرتب‌سازی حساب‌ها هستند. برای مثال، تصور کنید می‌خواهید یک گزارش مالی با چندین خط ایجاد کنید اما راهی برای یافتن قاعده‌ای جهت توزیع حساب‌ها بر اساس code آن‌ها ندارید. راه‌حل، استفاده از برچسب‌ها است، یکی برای هر خط گزارش، تا حساب‌ها را به دلخواه فیلتر کنید.

برچسب‌ها را در فایل data/account_account_tag_data.xml قرار دهید.

حساب‌ها

همچنین ببینید

بدیهی است که Chart of Accounts بدون Accounts نمی‌تواند وجود داشته باشد. باید آن‌ها را در data/account.account.template.csv مشخص کنید.

هشدار

  • از استفادهٔ asset_cash account_type پرهیز کنید! در واقع، حساب‌های بانکی و نقدی مستقیماً هنگام نصب ماژول بومی‌سازی ایجاد می‌شوند و سپس به یک account.journal پیوند داده می‌شوند.

  • برای حالت عمومی، تنها یک حساب از نوع پرداختنی/دریافتنی کافی است. با این حال، باید یک حساب دریافتنی PoS نیز تعریف کنیم. (در CoA پیوند داده می‌شود)

  • حساب‌های زیادی ایجاد نکنید: ۲۰۰ تا ۳۰۰ کافی است. اما در بیشتر مواقع، سعی می‌کنیم تعادل خوبی پیدا کنیم تا CoA پس از آن برای بیشتر شرکت‌ها به حداقل تغییر نیاز داشته باشد.

گروه‌های حساب

همچنین ببینید

مراجع گروه حساب

گروه‌های حساب امکان توصیف ساختار سلسله‌مراتبی چارت حساب‌ها را فراهم می‌کنند. فیلتر باید در گزارش فعال شود و سپس وقتی به اسناد حسابداری باز می‌شوید، والدهای حساب را نشان خواهد داد.

این با پیشوند start/end کار می‌کند، بنابراین هر حسابی که کد آن با چیزی بین start و end شروع شود، این account.group را به‌عنوان گروه والد خواهد داشت. علاوه بر این، گروه‌های حساب می‌توانند یک گروه حساب والد نیز برای تشکیل سلسله‌مراتب داشته باشند.

مالیات‌ها

همچنین ببینید

برای افزودن مالیات‌ها، ابتدا باید موقعیت‌های مالی و گروه‌های مالیاتی را مشخص کنید. معمولاً برای هر نرخ مالیاتی فقط به یک گروه مالیاتی نیاز دارید، به‌جز برای ۰٪، زیرا اغلب باید بین مالیات‌های معاف، ۰٪، مشمول‌نبوده و ... تمایز قائل شوید. این مدل تنها دو فیلد الزامی دارد: name و country. فایل data/template/account.tax.group-xx.csv را ایجاد کنید و گروه‌ها را فهرست کنید.

مالیات‌ها باید حداقل به یک موقعیت مالی تعلق داشته باشند، اما می‌توانند توسط چند موقعیت به اشتراک گذاشته شوند. اگر می‌خواهید مالیات بین همهٔ موقعیت‌های مالی به اشتراک گذاشته شود، فیلد را خالی بگذارید.

اکنون می‌توانید مالیات‌ها را از طریق فایل data/template/account.tax-xx.csv اضافه کنید. اولین مالیاتی که به‌عنوان خرید/فروش تعریف می‌کنید، به مالیات پیش‌فرض خرید/فروش برای محصولات شما نیز تبدیل می‌شود.

یک مالیات می‌تواند جایگزین مالیات دیگری نیز باشد. این جایگزینی زمانی اعمال می‌شود که موقعیت مالی مقصد استفاده شود.

گزارش مالیاتی

Enterprise feature

گزارش مالیاتی در اپلیکیشن Invoicing (account) اعلان می‌شود، اما گزارش تنها زمانی قابل دسترسی است که Accounting (account_accountant) نصب باشد.

در بخش قبل، فیلدهای invoice_repartition_line_ids یا refund_repartition_line_ids را دیدید و احتمالاً چیزی از آن‌ها متوجه نشدید. خبر خوب: شما در این عدم درک تنها نیستید. خبر بد: باید کمی آن را بفهمید. این موضوع پیچیده است. در واقع:

accounting_localization/tax_report.dot
> Graph not rendered because `dot` is not installed

نسخهٔ ساده این است که در قالب مالیات، در خطوط بازتوزیع فاکتور/بازپرداخت مشخص می‌کنید که آیا پایه یا درصدی از مالیات باید در کدام خط گزارش گزارش شود (از طریق فیلدهای minus/plus_report_line_ids). همچنین زمانی که پیکربندی مالیات را در رابط Odoo بررسی کنید، روشن می‌شود (یا اسناد Tax References, Tax Repartition References را بررسی کنید).

بنابراین، پس از پیکربندی صحیح مالیات‌ها، تنها کافی است فایل data/account_tax_report_data.xml را با یک رکورد برای account.report خود اضافه کنید. برای اینکه به‌عنوان گزارش مالیاتی در نظر گرفته شود، باید root_report_id صحیح را برای آن فراهم کنید.

<odoo>
    <record id="tax_report" model="account.report">
        <field name="name">Tax Report</field>
        <field name="root_report_id" ref="account.generic_tax_report"/>
        <field name="country_id" ref="base.XX"/>
    </record>

    ...
</odoo>

... که به دنبال آن اعلان خطوط آن، به‌صورت رکوردهای account.report.line می‌آید.

موقعیت‌های مالی

موقعیت‌های مالی را در فایل data/template/account.fiscal.position-xx.csv مشخص کنید. اولین موقعیت مالی که با کشور شرکت تطابق داشته باشد، به‌عنوان موقعیت مالی داخلی در نظر گرفته می‌شود.

گام‌های نهایی

در نهایت، می‌توانید یک شرکت دموی اضافه کنید تا بومی‌سازی به‌سادگی در حالت دمو قابل آزمایش باشد.

گزارش‌های حسابداری

Enterprise feature

همچنین ببینید

گزارش‌گیری

گزارش‌های حسابداری باید از طریق یک ماژول جداگانه l10n_XX_reports اضافه شوند که باید در مخزن enterprise قرار گیرد.

فایل پایهٔ __manifest__.py برای چنین ماژولی به این شکل خواهد بود:

{
    "name": "COUNTRY - Accounting Reports",
    "category": "Accounting/Localizations/Reporting",
    "version": "1.0.0",
    "author": "Odoo S.A.",
    "license": "OEEL-1",
    "depends": [
        "l10n_XX", "account_reports"
    ],
    "data": [
        "data/balance_sheet.xml",
        "data/profit_and_loss.xml",
    ],
    "auto_install": True,
}

مرور کارکردی گزارش‌های مالی در اینجا قرار دارد: گزارش‌گیری.

چند نمونهٔ خوب:

می‌توانید معنای فیلدها را در اینجا بررسی کنید:

اگر به گزارش خود یک root_report_id داده باشید، اکنون در انتخاب‌کنندهٔ نوع آن در دسترس است. در غیر این صورت، هنوز باید یک آیتم منو برای آن اضافه کنید. یک آیتم منوی پیش‌فرض را می‌توان از نمای فرم گزارش با کلیک روی Actions ↤ Create Menu Item ایجاد کرد. سپس باید صفحه را برای دیدن آن بازنشانی کنید. به‌صورت جایگزین، برای ایجاد یک بخش اختصاصی برای یک گزارش کاملاً جدید در منوی Reporting، باید یک رکورد جدید ir.ui.menu (معمولاً در ماژول اصلی l10n_XX) و یک ir.actions.client جدید (معمولاً در فایل XML گزارش جدید) ایجاد کنید که account.report را با report id جدید فراخوانی می‌کند. سپس منوی جدید را به‌عنوان فیلد parent_id در مدل اکشن تنظیم کنید.